2012-08-06 146 views
3

如果我有兩個值的文檔:如何在更換整個文檔時更新mongodb文檔?

{ 
    "name" : "Bob", 
    "location" "France" 
} 

再經過一個數組包含「名」,「國家」的文件。我如何確保整個文檔更新,刪除了「位置」?

我不會意識到這兩個文件之間的差異,所以我無法取消特定的字段。我正在尋找一種方法來簡單地用提供的數組替換文檔數據。

+0

在MongoDB中只有這兩個值的文檔是不可能的 - 它還必須有一個_id字段來唯一標識它。 – 2012-08-07 04:10:05

回答

6

如果您提供的update包含您想要的記錄的新文檔,您將替換該文檔。

例如:

db.so.insert({"name":"Bob", "location": "France"}) 
db.so.update({"name":"Bob", "location": "France"}, {"name":"Roberto", "country":"Italy"}) 
db.so.find() 

{ "_id" : ObjectId(), "name" : "Roberto", "country" : "Italy" } 

當然,如果你有文件的_id,這將是指定的更新(而不是傳回你剛插入像上面的文件)的一個更好的辦法

+0

因此,要完成更新,我需要將原始文檔數組和新文檔數組一起傳遞?我只是傳遞了新的數組,現在才意識到它並沒有刪除不在新數組中的字段。 – sterling 2012-08-06 23:17:46

+0

你只需要識別文件。在上面的例子中,我是通過將原始文檔傳回來的,這個文檔唯一標識了文檔。您可以通過傳遞想要更新的現有文檔的_id來實現。查看關於PHP更新的[documentation](http://www.php.net/manual/en/mongo.updates.php),其中顯示了替換和更新只是修改文檔的一部分的更新之間的區別。 – 2012-08-07 01:13:23

+0

非常感謝您的鏈接。這正是我需要的。 – sterling 2012-08-07 20:07:08