配置
启动mongo shell服务
#其中~表示省略的mongo安装路径
~\bin\mongo
#选择admin数据库
>use admin
#创建root/admin用户
>db.createUser({user:"root",pwd:"password",roles:["root"]})
>db.createUser(
{
user: "admin",
pwd: "123456",
roles: [{role: "userAdminAnyDatabase", db: "admin"}]
}
)
开启权限认证
一般的。在任何环境下安装MongoDB后,默认是没有开启权限认证的,但是仅仅适合开发环境使用,在线上环境肯定不可以这样做的。我们需要开启访问认证,并分配指定的用户及权限去连接,这样能有效的防止数据安全问题的发生。修改配置文件\bin\mongod.cfg 中
security:
authorization: enabled #启用授权
net:
bindIp: 0.0.0.0 #开启远程访问
权限类
MongoDB基本的角色
- 数据库用户角色:read、readWrite;
- 数据库管理角色:dbAdmin、dbOwner、userAdmin;
- 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
- 备份恢复角色:backup、restore;
- 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
- 超级用户角色:root
使用认证方式连接MongoDB
#使用用户admin连接
>mongo -port 27017 -u "admin" -p "123456" --authenticationDatabase "admin"
#创建其他用户
>db.createUser(
{
user: "otherUser",
pwd: "otherPwd",
roles: [{role: "readWrite", db: "otherDB"}]
}
)
服务端数据库认证连接
- 默认权限访问连接:
const Mongoose = require('mongoose');
const DbUrl = "mongodb:localhost:27017/otherDB";
//创建数据库连接
Mongoose.connect(DbUrl,{ useNewUrlParse: true });
const db = mongoose.connection;
//创建监听
db.on("error", function(){});
db.on("open", function(){});
- 指定用户角色连接:
const DbUrl = "mongodb://otherUser:otherPwd@localhost:27017/otherDB";
修改用户权限
#需要当前用户及更高的权限
>db.updateUser('otherUser',{pwd:'newPwd',roles:[{role:'read',db:'otherDB'}]});
#查询所有用户权限信息
>db.system.users.find().pretty();
删除用户
#删除所有库中指定的用户(需要root权限)
>db.system.users.remove({user:"otherUser"});
#删除指定数据库用户
>use otherDB;
>db.dropUser("otherUser");
常用语句
# insert
db.collection.insert({ "name": "test" });
db.collection.insert([{ "name": "test" },{ "name": "test1" }]);
db.collection.insert([{ "name": "test" },{ "name": "test1" }],{
# ordered (可选): 如果为 true,在数组中执行文档的有序插入,并且如果其中一个文档发生错误,MongoDB 将返回而不处理数组中的其余文档;如果为 false,则执行无序插入,若其中一个文档发生错误,则忽略错误,继续处理数组中的其余文档
# writeConcern (可选): 参数表示自定义写出错的级别,是一种出错捕捉机制
});
# insertOne 函数一次只能插入一条数据,如果插入多条的话,是会报错
db.collection.insertOne({ "name": "test" });
# inertMany 插入多条数据
db.collection.insertMany([{ "name": "test" }]);
# delete 删除
db.collection.deleteOne({ "name": "test" }); # 删除第一个检索的内容
db.collection.deleteMany({ "name": "test" }); # 删除所有检索的内容
db.collection.update({
"name": {
"$exists": true
}
}, {
"$unset": {
"name":null
}
}, {
multi: true
}); # 删除指定字段
# update 更新
db.collection.update({
# 查询条件
"_id": ObjectId('6380297bdafde9bc15c7b990')
},{
# 更新内容
"name": "test_1"
},{
# upsert:布尔型可选项,表示如果不存在 update 的记录,是否插入这个新的文档。true 为插入;默认为 false,不插入。
# multi:布尔型可选项,默认是 false,只更新找到的第一条记录。如果为 true,则把按条件查询出来的记录全部更新。
# writeConcem:表示出错级别。
# collation:指定语言。
})
# save 如果主键_id不存在时,进行插入操作,存在时进行更新操作
# insertOne和save不同,主键冲突时insertOne会报错,而save会直接用新值覆盖旧值
db.coolection.save({ "_id":ObjectId("6380297bdafde9bc15c7b990"), "name": "test" });
# find 查询
db.coolection.find({"name": "test"})
# [{"tag": [1]},{"tag": [1,2,3]}]
db.coolection.find({"tag": {$size: 3}}) # 查询有3个元素的数组
db.coolection.find({tag: {$regex: /2/}}) # 正则匹配内容
.limit(10) # 查询结果的个数,如下语句只返回 3 个匹配的结果。若匹配的结果不到 3 个,则返回匹配数量的结果
.skip(3) # 跳过前3个查询结果
.sort({"name" : 1}) # 对查询结果进行排序,1 是升序,-1 是降序
db.coolection.find({"name": "test"}).count() # 查询结果的总数量
查询条件操作符

参考
MongoDB用户角色配置:https://www.cnblogs.com/out-of-memory/p/6810411.html
MongoDB Find方法:http://c.biancheng.net/view/6555.html
MongoDB 创建索引:http://t.zoukankan.com/duanxz-p-3606917.html