2016-07-31 101 views
1

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

这是更新语句:

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

我使用Robomongo和得到的答复是Updated 1 record(s) in 22ms但是当我检查了数据库中的记录就不见了。我在这里错过了什么?

+1

“记录”是什么意思?它应该是文档字段还是整个文档?那么,你知道你的更新查询没有任何'$ set'或'$ unset'运算符吗? – felipsmartins

+1

您*用{{ButtonValues:[0,1,2]}'替换了与{{Name:“IsSomeCompany”}'标准匹配的文档。如果您打算更新匹配文档的部分内容,请使用'$ set'运算符。 –

+3

您使用的工具在这种情况下无关紧要。我使用这个语法来更新多个文档。 。db.getCollection( 'YourDocument')更新( { “matchingField”: “matchingValue”},{ $设置:{ “场”: “值”}} , {多:真} ) – Hamedz

回答

3

如果要更新只有一个字段,你应该使用$集合运算符。 但是,如果你想要的是替换文件,我与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和流星方法这让删除的文件。

我发现的唯一方法是使用$ set操作符并替换每个字段。但这将尝试更新蒙戈“_id”,所以我觉得只是一个解决办法...

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

缺少什么我在这里? :/