MongoDB – 常用命令

2020-08-20 657 0

配置

启动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基本的角色

  1. 数据库用户角色:read、readWrite;
  2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
  3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
  4. 备份恢复角色:backup、restore;
  5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
  6. 超级用户角色: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

相关文章

Mongodb – 错误码:E11000 duplicate key error collection 如何设置unique可为空