MongoDB 使用 update() 和 save() 方法来更新集合中的文档。
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() 方法通过传入的文档来替换已有文档。语法格式如下:
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" }