2015-04-16 79 views
6

一邊唸叨蒙戈保存和更新,我得到了一點混淆-as每篇文章MongoDB的保存和更新

MongoDB的更新()和save()方法用於更新文檔到一個集合。 update()方法更新現有文檔中的值,而save()方法用save()方法中傳遞的文檔替換現有文檔。

請讓我知道兩者的區別。

+0

一個明顯的區別是更新方法可以接受多個參數,如**。更新({查詢},{更新},{選項})** **而**'保存**只接受一個參數。 – chridam

回答

9

update更改您的查找參數找到的現有文檔,並且在沒有此文檔時不會執行任何操作(除非您使用upsert選項)。

save不允許任何查找參數。它檢查是否存在與您保存的文檔相同的文檔_id。當它存在時,它將取代它。當不存在這樣的文檔時,它將該文檔作爲新文檔插入。當插入的文檔沒有_id字段時,它會在插入之前生成一個新創建的ObjectId。

collection.save(document);是基本上的縮寫:

if (document._id == undefined) { 
    document._id = new ObjectId(); 
} 
collection.update({ "_id":document._id }, document, { upsert:true }); 
1

從文檔:

Save command.

的保存()方法使用任一插入或更新命令,該命令 使用默認的寫關注。要指定不同的寫入關注點, 在選項參數中包含寫入關注點。

如果文檔不包含_id字段,則save()方法 將調用insert()方法。

如果文檔包含一個_id字段,則save()方法爲 等效於updid選項設置爲true並且 查詢謂詞在_id字段上。

Update command

如果UPSERT沒有指定它

修改集合中的現有文檔或文件。方法 可以修改現有文檔或文檔的特定字段,或者根據更新 參數完全替換現有文檔。

如果upsert爲true且沒有文檔與查詢條件匹配,則update() 將插入單個文檔。


所以他們很相似,都可以更新和插入文檔。區別在於保存只能更新一個文檔。