前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MongoDB 常用

MongoDB 常用

作者头像
4O4
发布2022-04-25 20:02:18
2660
发布2022-04-25 20:02:18
举报
文章被收录于专栏:404404

shell 连接

代码语言:javascript
复制
mongo "mongodb://test:8888@127.0.0.1:28015/database?authSource=admin"

mongo --username alice --password 8888 --authenticationDatabase admin --host 127.0.0.1 --port 28015

更新文档

update() 方法

update() 方法用于更新已存在的文档,语法格式如下

代码语言:javascript
复制
db.collection.update(
   <query>,
   <update>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>
   }
)

参数说明

  • query : update的查询条件,类似sql update查询内where后面的。
  • update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
  • upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
  • multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
  • writeConcern :可选,抛出异常的级别。
实例

通过查询

代码语言:javascript
复制
show dbs --> use dbs --> show collections --> db.collection.find().pretty()

得到

代码语言:javascript
复制
{
  "_id" : ObjectId("5da6c7db37a6775694f19f5e"),
  "id" : 10001,
  "title" : "我是第一个商品",
  "imgUrl" : "",
  "price" : 8888,
  "oldPrice" : 10888,
	"tags" : [
    "com",
    "cn",
    "net"
  ]
}
{
  "_id" : ObjectId("5da6c83973290000850053a7"),
  "id" : 10002,
	"title" : "我是第二个商品",
	"imgUrl" : "",
	"price" : 6666,
  "oldPrice" : 6688,
  "tags" : [], 
}

为 id 为 10001 的数据添加 imgUrl

代码语言:javascript
复制
db.goods.update({'id':10001},{$set: {'imgUrl':'https://chen97.cn/wp-content/uploads/2019/10/unishop/goods/10001/main/1.jpg'}})

// WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

验证

代码语言:javascript
复制
{
  "_id" : ObjectId("5da6c7db37a6775694f19f5e"),
  "id" : 10001,
  "title" : "我是第一个商品",
  "imgUrl" : "https://chen97.cn/wp-content/uploads/2019/10/unishop/goods/10001/main/1.jpg",
  "price" : 8888,
  "oldPrice" : 10888,
  "tags" : [
    "com",
    "cn",
    "net"
  ]
}

save() 方法

save() 方法通过传入的文档来替换已有文档,语法格式如下

代码语言:javascript
复制
db.collection.save(
   <document>,
   {
     writeConcern: <document>
   }
)

参数说明

  • document : 文档数据。
  • writeConcern :可选,抛出异常的级别。
实例

替换 _id 为 5da6c83973290000850053a7 的文档数据

代码语言:javascript
复制
db.goods.save({
  "_id" : ObjectId("5da6c83973290000850053a7"),
  "id" : 10002,
	"title" : "我是第二个商品",
	"imgUrl" : "https://chen97.cn/wp-content/uploads/2019/10/unishop/goods/10002/main/1.jpg",
	"price" : 6666,
  "oldPrice" : 6688,
	"tags" : ["sales","hot"], 
})

通过 find() 命令来查看替换后的数据

代码语言:javascript
复制
{
  "_id" : ObjectId("5da6c83973290000850053a7"),
  "id" : 10002,
	"title" : "我是第二个商品",
	"imgUrl" : "https://chen97.cn/wp-content/uploads/2019/10/unishop/goods/10002/main/1.jpg",
	"price" : 6666,
  "oldPrice" : 6688,
	"tags" : ["sales","hot"], 
}

更多实例

只更新第一条记录

代码语言:javascript
复制
db.col.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } );

全部更新

代码语言:javascript
复制
db.col.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true );

只添加第一条

代码语言:javascript
复制
db.col.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false );

全部添加进去

代码语言:javascript
复制
db.col.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true );

全部更新

代码语言:javascript
复制
db.col.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true );

只更新第一条记录

代码语言:javascript
复制
db.col.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false );

用户

查看所有用户

代码语言:javascript
复制
 use admin;
 db.auth('root','password');
 db.system.users.find().pretty();

查看当前数据库用户

代码语言:javascript
复制
use db;
show users;

创建用户

代码语言:javascript
复制
db.createUser({
  user:'username',
  pwd: 'password',
  roles:[
    { role:'readWrite',db:'dbname' },
    { role:'dbAdmin',db:'dbname' }
  ]
})
内置角色

1. 数据库用户角色:read、readWrite;

2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;

3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;

4. 备份恢复角色:backup、restore;

5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase

6. 超级用户角色:root

// 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)

7. 内部角色:__system

对应权限

read:允许用户读取指定数据库

readWrite:允许用户读写指定数据库

backup,retore:在进行备份、恢复时可以单独指定的角色,在db.createUser()方法中roles里面的db必须写成是 admin库,要不然会 报错

dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile

userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户

clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。

readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限

readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限

userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限,

dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限

root:只在admin数据库中可用。超级账号,超级权限

删除用户

代码语言:javascript
复制
db.dropUser('username');

错误处理

Parameter "obj" to Document() must be an object, got {...}

代码语言:javascript
复制
ObjectParameterError: Parameter "obj" to Document() must be an object, got {
  id: 4,
  title: "new active4",
  url: "https://uni-shop-1300412297.file.myqcloud.com/images/banner/b4.png",
  to: "10004"
}

注意参数是否为标准 json 对象。

代码语言:javascript
复制
{
  "id": 4,
  "title": "new active4",
  "url": "https://uni-shop-1300412297.file.myqcloud.com/images/banner/b4.png",
  "to": "10004"
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-12-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • shell 连接
  • 更新文档
    • update() 方法
      • 实例
    • save() 方法
      • 实例
    • 更多实例
    • 用户
      • 查看所有用户
        • 查看当前数据库用户
          • 创建用户
            • 内置角色
            • 对应权限
          • 删除用户
          • 错误处理
            • Parameter "obj" to Document() must be an object, got {...}
            相关产品与服务
            数据库
            云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档