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。但是当我查询它们时,它没有更新。
答案 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)