MongoDB 更新文档
-
更新文档
MongoDB的update()和save()方法用于将文档更新为集合。update()方法更新现有文档中的值,而save()方法将现有文档替换为save()方法中传递的文档。 -
update()方法
update()方法更新现有文档中的值。语法>db.COLLECTION_NAME.update(SELECTION_CRITERIA, UPDATED_DATA)
示例考虑到mycol集合具有以下数据。{ "_id" : ObjectId("5f4871eb69ad8645590791a2"), "title" : "MongoDB Overview" } { "_id" : ObjectId("5f4871eb69ad8645590791a3"), "title" : "NoSQL Overview" } { "_id" : ObjectId("5f4871eb69ad8645590791a4"), "title" : "Tutorials Point Overview" }
以下示例将为标题为“MongoDB Overview”的文档设置新标题“New MongoDB Tutorial”。db.mycol.find(); # 查询现有数据 { "_id" : ObjectId("5f4871eb69ad8645590791a2"), "title" : "MongoDB Overview" } { "_id" : ObjectId("5f4871eb69ad8645590791a3"), "title" : "NoSQL Overview" } { "_id" : ObjectId("5f4871eb69ad8645590791a4"), "title" : "Tutorials Point Overview" } > db.mycol.update({'title':'MongoDB Overview'},{$set:{'title':'New MongoDB Tutorial'}}) # 修改 WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) #修改返回 > db.mycol.find(); #查询修改后的数据 { "_id" : ObjectId("5f4871eb69ad8645590791a2"), "title" : "New MongoDB Tutorial" } { "_id" : ObjectId("5f4871eb69ad8645590791a3"), "title" : "NoSQL Overview" } { "_id" : ObjectId("5f4871eb69ad8645590791a4"), "title" : "Tutorials Point Overview" }
默认情况下,MongoDB仅更新一个文档。要更新多个文档,您需要将参数“multi”设置为true。-db.mycol.update({'title':'MongoDB Overview'},{$set:{'title':'New MongoDB Tutorial'}},{multi:true})
-
save() 方法
save()方法通过了新的文件替换现有的文档(带_id参数且存在该记录,如果不存在则插入一条新的)。语法>db.COLLECTION_NAME.save({_id:ObjectId(),NEW_DATA})
以下示例从名为mycol的集合中检索所有文档,并以易于阅读的格式排列它们。> db.mycol.find() # 现有数据 { "_id" : ObjectId("5f4871eb69ad8645590791a2"), "title" : "New MongoDB Tutorial" } { "_id" : ObjectId("5f4871eb69ad8645590791a3"), "title" : "NoSQL Overview" } { "_id" : ObjectId("5f4871eb69ad8645590791a4"), "title" : "Tutorials Point Overview" } > db.mycol.save( { "_id" : ObjectId("5f4871eb69ad8645590791a2"), "title":"Tutorials Point New Topic Good good", "by":"菜鸟教程" } ); # save 替换_id 为 5f4871eb69ad8645590791a2的文档 WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) # save 执行返回 > db.mycol.find() #查询修改后的数据 { "_id" : ObjectId("5f4871eb69ad8645590791a2"), "title" : "Tutorials Point New Topic Good good", "by" : "菜鸟教程" } { "_id" : ObjectId("5f4871eb69ad8645590791a3"), "title" : "NoSQL Overview" } { "_id" : ObjectId("5f4871eb69ad8645590791a4"), "title" : "Tutorials Point Overview" }
-
findOneAndUpdate() 方法
findOneAndUpdate() 方法中的现有文档中更新的值。语法:>db.COLLECTION_NAME.findOneAndUpdate(SELECTIOIN_CRITERIA, UPDATED_DATA)
假设我们创建了一个名为empDetails的集合,并在其中插入了三个文档,如下所示-db.empDetails.insertMany( [ { title: "Java 教程", author: "张三", phone: "18812454545" }, { title: "PHP 教程", author: "李四", phone: "18912454545" }, { title: "Python 教程", author: "王五", phone: "19912454545" } ] )
以下示例更新author为“李四”的文档的phone值。db.empDetails.find(); #修改前 { "_id" : ObjectId("5f48781a17adfc074ccae0e7"), "title" : "Java 教程", "author" : "张三", "phone" : "18812454545" } { "_id" : ObjectId("5f48781a17adfc074ccae0e8"), "title" : "PHP 教程", "author" : "李四", "phone" : "18912454545" } { "_id" : ObjectId("5f48781a17adfc074ccae0e9"), "title" : "Python 教程", "author" : "王五", "phone" : "19912454545" } > db.empDetails.findOneAndUpdate( {author: '李四'}, { $set: {phone:"13888888888"}} ); # 修改 { "_id" : ObjectId("5f48781a17adfc074ccae0e8"), "title" : "PHP 教程", "author" : "李四", "phone" : "18912454545" } > db.empDetails.find(); # 查询修改后的 { "_id" : ObjectId("5f48781a17adfc074ccae0e7"), "title" : "Java 教程", "author" : "张三", "phone" : "18812454545" } { "_id" : ObjectId("5f48781a17adfc074ccae0e8"), "title" : "PHP 教程", "author" : "李四", "phone" : "13888888888" } { "_id" : ObjectId("5f48781a17adfc074ccae0e9"), "title" : "Python 教程", "author" : "王五", "phone" : "19912454545" }
-
MongoDB updateOne() 方法
此方法更新与给定过滤器匹配的单个文档。语法:db.COLLECTION_NAME.updateOne(<filter>, <update>)
db.empDetails.find(); #修改前 { "_id" : ObjectId("5f48781a17adfc074ccae0e7"), "title" : "Java 教程", "author" : "张三", "phone" : "18812454545" } { "_id" : ObjectId("5f48781a17adfc074ccae0e8"), "title" : "PHP 教程", "author" : "李四", "phone" : "13888888888" } { "_id" : ObjectId("5f48781a17adfc074ccae0e9"), "title" : "Python 教程", "author" : "王五", "phone" : "19912454545" } > db.empDetails.updateOne({author: '王五'},{ $set: { phone: '19999999999'}}) #修改 { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 } > db.empDetails.find(); # 修改后 { "_id" : ObjectId("5f48781a17adfc074ccae0e7"), "title" : "Java 教程", "author" : "张三", "phone" : "18812454545" } { "_id" : ObjectId("5f48781a17adfc074ccae0e8"), "title" : "PHP 教程", "author" : "李四", "phone" : "13888888888" } { "_id" : ObjectId("5f48781a17adfc074ccae0e9"), "title" : "Python 教程", "author" : "王五", "phone" : "19999999999" }
-
updateMany()方法
updateMany() 方法更新与给定过滤器匹配的所有文档。>db.COLLECTION_NAME.update(<filter>, <update>)
示例:db.empDetails.find(); { "_id" : ObjectId("5f48781a17adfc074ccae0e7"), "title" : "Java 教程", "author" : "张三", "phone" : "18812454545" } { "_id" : ObjectId("5f48781a17adfc074ccae0e8"), "title" : "PHP 教程", "author" : "李四", "phone" : "13888888888" } { "_id" : ObjectId("5f48781a17adfc074ccae0e9"), "title" : "Python 教程", "author" : "王五", "phone" : "19999999999" } > db.empDetails.updateMany({ $or:[{author:"张三"}, { author:"李四"}] } ,{ $set: { phone: '10086'}}); { "acknowledged" : true, "matchedCount" : 2, "modifiedCount" : 2 } > db.empDetails.find(); { "_id" : ObjectId("5f48781a17adfc074ccae0e7"), "title" : "Java 教程", "author" : "张三", "phone" : "10086" } { "_id" : ObjectId("5f48781a17adfc074ccae0e8"), "title" : "PHP 教程", "author" : "李四", "phone" : "10086" } { "_id" : ObjectId("5f48781a17adfc074ccae0e9"), "title" : "Python 教程", "author" : "王五", "phone" : "19999999999" }