【问题标题】:How come this MongoDB update doesn't work?为什么这个 MongoDB 更新不起作用?
【发布时间】:2011-04-20 21:30:37
【问题描述】:
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。但是当我查询它们时,它没有更新。

【问题讨论】:

    标签: mongodb database


    【解决方案1】:

    它确实有效,但默认情况下只更新第一个匹配的文档。我怀疑你那里有一些文件,现在是 999。

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

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

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

    您不妨查看docs on updating 以及有关这些标志的更多信息。

    【讨论】:

      【解决方案2】:

      注意 update() 用作为参数传递的元素替换找到的元素,您应该使用 $set 原子运算符来更新字段的值(当然,Brendan 是正确的第一对多匹配):

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-30
        • 2011-04-06
        • 2013-03-10
        • 1970-01-01
        相关资源
        最近更新 更多