MongoDB 更新文档

MongoDB 使用 update() 和 save() 方法来更新集合中的文档。接下来让我们详细来看下两个函数的应用及其区别。

语法:

update() 方法的基本语法如下

  1. db.collection.update(
  2. <query>,
  3. <update>,
  4. {
  5. upsert: <boolean>,
  6. multi: <boolean>,
  7. writeConcern: <document>
  8. }
  9. )

参数说明:

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

例子

考虑以下数据mycol集合。

  1. > db.mycol.find().pretty()
  2. {
  3. "_id" : ObjectId("5799c3eb235910620b89c674"),
  4. "title" : "MongoDB Overview",
  5. "description" : "MongoDB is no sql database",
  6. "by" : "tutorials itcast",
  7. "url" : "http://www.itcast.cn",
  8. "tags" : [
  9. "mongodb",
  10. "database",
  11. "NoSQL"
  12. ],
  13. "likes" : 100
  14. }
  15. {
  16. "_id" : ObjectId("5799c3f3235910620b89c675"),
  17. "title" : "MySQL Overview",
  18. "description" : "MySQL is sql database",
  19. "by" : "tutorials itcast",
  20. "url" : "http://www.itcast.cn",
  21. "tags" : [
  22. "MySQL",
  23. "database",
  24. "SQL"
  25. ],
  26. "likes" : 40
  27. }

下面的例子将设置标题MongoDB Overview的文件,更新其标题是New MongoDB Tutorial

  1. > db.mycol.update({
  2. 'title': 'MongoDB Overview'
  3. },
  4. {
  5. $set: {
  6. 'title': 'New MongoDB Tutorial'
  7. }
  8. })
  9. WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
  10. > db.mycol.find()
  11. > db.mycol.find().pretty()
  12. {
  13. "_id" : ObjectId("5799c3eb235910620b89c674"),
  14. "title" : "New MongoDB Tutorial",
  15. "description" : "MongoDB is no sql database",
  16. "by" : "tutorials itcast",
  17. "url" : "http://www.itcast.cn",
  18. "tags" : [
  19. "mongodb",
  20. "database",
  21. "NoSQL"
  22. ],
  23. "likes" : 100
  24. }
  25. {
  26. "_id" : ObjectId("5799c3f3235910620b89c675"),
  27. "title" : "MySQL Overview",
  28. "description" : "MySQL is sql database",
  29. "by" : "tutorials itcast",
  30. "url" : "http://www.itcast.cn",
  31. "tags" : [
  32. "MySQL",
  33. "database",
  34. "SQL"
  35. ],
  36. "likes" : 40
  37. }

MongoDB默认将只更新单一的文件,来更新多个你需要设置参数置multi为true

  1. >db.mycol.update({'by':'tutorials itcast'},{$set:{'by':'itcast'}},{multi:true})

MongoDB Save() 方法

save() 方法覆盖原有的文档 或者 插入新的文档

语法

MongoDB 的 save() 方法的基本语法如下:

  1. db.collection.save(
  2. <document>,
  3. {
  4. writeConcern: <document>
  5. }
  6. )

参数说明:

  • document : 要存储的文档数据。
  • writeConcern :可选,抛出异常的级别。

例子

下面的例子将取代文件具有_id为 '5799c3eb235910620b89c674'

>db.mycol.save( { "_id" : ObjectId("5799c3eb235910620b89c674"), "title":"itcast New Topic", "by":"itcast" })WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })> db.mycol.find().pretty(){ "_id" : ObjectId("5799c3eb235910620b89c674"), "title" : "itcast New Topic", "by" : "itcast"}{ "_id" : ObjectId("5799c3f3235910620b89c675"), "title" : "MySQL Overview", "description" : "MySQL is sql database", "by" : "tutorials itcast", "url" : "http://www.itcast.cn&#34;, "tags" : [ "MySQL", "database", "SQL" ], "likes" : 40}}>

更新操作 在 MongoDB update() 和 SQL Update 区别

SQL Update StatementsMongoDB update() Statements
  1. UPDATE usersSET status = "C"WHERE age > 25
  1. db.users.update( { age: { $gt: 25 } }, { $set: { status: "C" } }, { multi: true })
  1. UPDATE usersSET age = age + 3WHERE status = "A"
  1. db.users.update( { status: "A" } , { $inc: { age: 3 } }, { multi: true })