2017-06-21 49 views
1

coupes集合的示例記錄是這樣的:如何在我的數據庫新領域添加到現有的文檔

db.coupes.findOne() 
{ 
    "_id" : ObjectId("5949834be916d79e033500c6"), 
    "rank" : 10, 
    "brand" : "Toyota", 
    "model" : "86SE" 
} 

不過,我想,這樣它看起來像下面對其進行更新:

{ 
"_id" : ObjectId("5949834be916d79e033500c6"), 
"rank" : 10, 
"brand" : "Toyota", 
"model" : "86SE", 
"engineSpec" : {"cylinderConfiguration": "H-4", "transmission" : "6 speed auto"} 
} 

我該怎麼做到這一點?

+0

您的問題標題詢問有關插入新對象;然而,你的問題中的第二個例子與第一個例子具有相同的「ObjectId」。您是否嘗試更新第一個示例中顯示的文檔,或者您是否嘗試插入新文檔? – Donut

+0

我想添加新字段 –

回答

2

所以,你應該使用'update'方法並傳遞兩個對象:第一個找到你要更新的文檔,第二個 - 更新數據。

如您所見,我使用'$ set'操作符來防止對象被完全替換爲傳遞的數據。 瞭解更多關於update方法和$set運營商在官方docs

db.coupes.update(
     { 
      _id: ObjectId("5949834be916d79e033500c6") 
     }, 
     { 
      $set : { 
       engineSpec : {"cylinderConfiguration": "H-4", "transmission" : "6 speed auto"} } 
      } 
     } 
    ) 

我用的ObjectId在我的例子中,只能找到參數,因爲它正在更新單uniq的文件。其實你可以通過任何領域找到對象,但要記住,如果你有哪些有相同的字段/值的多個對象 - 你需要multi:true選項添加到您的查詢來更新所有適用的文件:

db.coupes.update(
      { 
       rank: 10 
      }, 
      { 
       $set : { 
        engineSpec : {"cylinderConfiguration": "H-4", "transmission" : "6 speed auto"} } 
       } 
      }, 
      { 
       multi: true 
      } 
     ) 

這樣的代碼將更新等級爲10的所有文檔。另外,您應該注意到我在第三個對象中添加了「多個」選項,這是您之前沒有看到的。閱讀更多關於更新選項here

+0

@IhorFedchenko,我用新的例子更新了我的答案,在那裏我更新了排名爲10的所有文檔。不知道它是否正是您要求的。 –

相關問題