MongoDB更新文档

本文将介绍怎样使用update()和save()方法去更新文档。

MongoDB 使用 update() 和 save() 方法来更新集合中的文档。

update()方法

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

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 :可选,抛出异常的级别。

实例:向users中插入一个文档,然后使用update()方法修改文档。如下图:

# 插入一个文档到users集合
> db.users.insert({name:"ZhangSan", age:20, email:"zhangs@163.com"});
WriteResult({ "nInserted" : 1 })

# 查看刚刚插入的文档
> db.users.find();
{ "_id" : ObjectId("5e4930bca5e28735adfe78fc"), "name" : "ZhangSan", "age" : 20, "email" : "zhangs@163.com" }

# 根据 name 更新文档
# 将name为“ZhangSan”的email改为“zhangs@sina.com”
> db.users.update({"name":"ZhangSan"}, {$set:{email:"zhangs@sina.com"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

# 查看刚刚更新的文档
> db.users.find();
{ "_id" : ObjectId("5e4930bca5e28735adfe78fc"), "name" : "ZhangSan", "age" : 20, "email" : "zhangs@sina.com" }
>

更多实例,如下:

# 更新年龄大于20的第一条记录,将name更新为LiSi
db.col.update({"age" : { $gt : 20 }} , { $set : {"name" : "LiSi"} } );

# 将年龄大于20的所有记录的name修改为LiSi
db.col.update({ "age" : {$gt : 20}}, {$set : {"name" : "LiSi"}}, false, true );

# 如果age大于20的记录存在,则将第一条记录修改了;如果age大于20的记录不存在,则将name=LiSi添加到 users 集合
db.col.update({"age" : {$gt : 20}} , {$set : {"name" : "LiSi"}}, true, false );

# 如果age大于20的记录存在,则将全部记录修改了;如果age大于20的记录不存在,则将name=LiSi添加到 users 集合
db.col.update({"age" : {$gt : 20}} , {$set : {"name" : "LiSi"}}, true, true );

save()方法

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

db.collection.save(
   <document>,
   {
     writeConcern: <document>
   })

参数说明:

  • document:文档数据。

  • writeConcern:可选,抛出异常的级别。

实例:向users集合插入文档,然后使用save()方法根据_id进行替换,以达到更新文档的目的。如下:

# 插入文档到集合
> db.users.insert({name:"ZhangSan", age:27});
WriteResult({ "nInserted" : 1 })

# 查看刚刚插入的集合
> db.users.find();
{ "_id" : ObjectId("5e493324a5e28735adfe78fd"), "name" : "ZhangSan", "age" : 27 }

# 根据 _id 替换文档
> db.users.save({"_id":ObjectId("5e493324a5e28735adfe78fd"), "name" : "WangWu"});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

# 查看已经替换的文档
> db.users.find();
{ "_id" : ObjectId("5e493324a5e28735adfe78fd"), "name" : "WangWu" }
在年轻人的颈项上,没有什么东西能比事业心这颗灿烂的宝珠更迷人的了。 —— 哈菲兹
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号