为什么这个MongoDB更新不起作用?

时间:2011-04-20 21:30:38

标签: mongodb database

db.posts.update({}, {"pop_score":999});

db.posts.find({},{"pop_score":1});
{ "_id" : ObjectId("4d8eadd6df83500f3b000004"), "pop_score" : 0 }
{ "_id" : ObjectId("4d8eb1e3df83500f3b000035"), "pop_score" : 1 }
{ "_id" : ObjectId("4d8eb238df83500f3b000039"), "pop_score" : 1 }
{ "_id" : ObjectId("4d91377bdf8350063d000000"), "pop_score" : 1 }
{ "_id" : ObjectId("4d913c19df8350063d000001"), "pop_score" : 2 }
{ "_id" : ObjectId("4d8eacabdf83500f3b000000"), "pop_score" : 1 }

我将所有帖子的pop_score更新为999。但是当我查询它们时,它没有更新。

2 个答案:

答案 0 :(得分:11)

它确实有效,但默认只更新FIRST匹配文档。我怀疑你有一些文件,现在是999。

您需要做的是通过将可选的multi标志设置为true来告诉MongoDB更新每个匹配的文档:

db.posts.update({}, {"pop_score":999}, false, true)

这将更新每个文档,而不仅仅是它找到的第一个文档。

您可能希望查看docs on updating,其中包含有关这些标记的更多信息。

答案 1 :(得分:2)

请注意update()将找到的元素替换为作为参数传递的元素,您应该使用$set原子运算符来更新字段的值(当然,Brendan是对的关于第一场比赛与多场比赛):

db.posts.update({}, { $set: { pop_score: 999 } }, false, true)
相关问题