【问题标题】:MongoDb db.Collection.update() deleted my documentMongoDb db.Collection.update() 删除了我的文档
【发布时间】:2016-12-05 22:09:48
【问题描述】:

我在mongodb 数据库上运行update 语句,它删除了我的文档!我做错了什么?

这是更新声明:

db.Question.update( {Name: "IsSomeCompany"}, {ButtonValues: [0, 1, 2] } )

我正在使用Robomongo,回复是Updated 1 record(s) in 22ms,但是当我检查数据库时,记录消失了。我在这里想念什么?

【问题讨论】:

  • “记录”是什么意思?它应该是文档字段还是整个文档?那么,您知道您的更新查询没有任何$set$unset 运算符吗?
  • 替换了{Name: "IsSomeCompany"} 条件匹配的文档为{ButtonValues: [0, 1, 2] }。如果您打算更新部分匹配文档,请使用$set 运算符。
  • 您使用的工具在这种情况下无关紧要。我使用这种语法来更新多个文档。 db.getCollection('YourDocument').update( { "matchingField" : "matchingValue"}, {$set: { "field": "value" } }, { multi: true } )
  • @Hamedz 谢谢。你能写这是一个答案吗?更新的文档不清楚(至少我看的地方),我没有看到你需要 $set.所以我认为它作为一个答案可能很有价值。

标签: mongodb robo3t


【解决方案1】:

我使用这种语法来更新多个文档。

db.getCollection('YourDocument').update(
   { "matchingField" : "matchingValue"}, 
   { "$set": { "field": "value" } }, 
   { "multi": true } 
)

https://docs.mongodb.com/manual/tutorial/update-documents/

【讨论】:

    【解决方案2】:

    如果您尝试只更新一个字段,您应该使用 $set 运算符。 但是,如果您想要替换文档,我对 Mongo 和 Meteor 也有同样的问题。我在 Mongo 文档中发现,要替换文档,您不需要使用 $ 运算符,只需传递字段/值对:

    以下操作传递一个仅包含字段和值对的文档。除了 _id 字段之外,该文档完全替换了原始文档。

    db.books.update({ item: "XYZ123" },
        {
         item: "XYZ123",
         stock: 10,
         info: { publisher: "2255", pages: 150 },
         tags: [ "baking", "cooking" ]
        })
    

    https://docs.mongodb.com/manual/reference/method/db.collection.update/#example-update-replace-fields

    但是在 Robomongo 和 Meteor 方法中,这都会删除文档。

    我发现的唯一方法是使用 $set 运算符并替换每个字段。但是这会尝试更新 mongo '_id',所以我认为这只是一种解决方法......

    db.books.update({ item: "XYZ123" },
        {
          $set: {
            item: "XYZ123",
            stock: 10,
            info: { publisher: "2255", pages: 150 },
            tags: [ "baking", "cooking" ]
          }
        })
    

    我在这里缺少什么? :/

    【讨论】:

    • 对我来说,这个答案比接受的答案更好。 @Ana Turrillo 您花时间解释了$set 的用法,而第一个是带有指向更大文档的链接的小块代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-24
    • 1970-01-01
    • 1970-01-01
    • 2013-09-14
    • 2016-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多