2016-07-31 105 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" ] 
     } 
    }) 

缺少什麼我在這裏? :/