2017-08-26 33 views
-2

Que。更換整個文檔,其_id爲1MongoDB用id替換整個Doc 1

db.emp.save({_id:1})

是它的正確與否?

+0

的查詢什麼代替? – nullpointer

+0

替換_id爲1的整個文檔。 –

+0

替換時,您將刪除現有文檔並使用較新的文檔進行更新。當時是在問那個文件。 – nullpointer

回答

0

你可能在尋找replaceOne mongodb的方法。它可以用作:

db.restaurant.replaceOne(
     { "_id" : "1", "somfield" : "Old value" }, 
     { "_id" : "1", "somfield" : "New value", "additional" : "addedField" } 
    ); 

- 第一個參數,如果要被替換的文件的過濾器,第二個是將取代它的文檔。

+1

非常感謝你...... –

0

讓我們到外殼,只是來看看的save方法

> db.test.save 
function (obj, opts) { 
    if (obj == null) 
     throw Error("can't save a null"); 

    if (typeof(obj) == "number" || typeof(obj) == "string") 
     throw Error("can't save a number or string"); 

    if (typeof(obj._id) == "undefined") { 
     obj._id = new ObjectId(); 
     return this.insert(obj, opts); 
    } else { 
     return this.update({_id: obj._id}, obj, Object.merge({upsert: true}, opts)); 
    } 
} 
> 

現在,如果我們在以簡單的步驟絕塵而去的邏輯跳躍。

沒有_id存在的對象

  • 創建一個新的ObjectId
  • 附加字段對象的集合
  • 呼叫insert與傳遞選項來保存

_id存在於對象

  • 合併我們與{upsert: true}選項傳遞,因此選擇{a: 1, b: 2 } + {upsert: true}將與合併後的選項集合{a: 1, b: 2, upsert: true }
  • 調用Update,也是對象_id