2014-11-17 165 views
3

我有這樣的MongoDB集合中的文檔:插入嵌入文檔到一個新的領域的MongoDB文檔中

{ 
    _id: 133, 
    Name: "abc", 
    Price: 20 
} 

我想補充一個新的領域「PackSizes」這可能是或不是可能的一個數組類型,然後想在其中嵌入一個文件。 Like-

PackSizes: 
     [ 
      {_id: 123, PackSizeName:"xyz", UnitName:"pqr"} 
     ] 

or, 

PackSizes: {_id: 123, PackSizeName:"xyz", UnitName:"pqr"} 

我是mongodb的新手。請幫忙。

回答

6

您可以

db.test.update(
    { _id : 133 }, 
    { $set : { PackSizes: {_id: 123, PackSizeName:"xyz", UnitName:"pqr"}} } 
) 

PackSizes做它可以是任何文件,以陣列或沒有它。

你的結果文件將

{ 
    "_id" : 133, 
    "Name" : "abc", 
    "Price" : 20, 
    "PackSizes" : { 
     "_id" : 123, 
     "PackSizeName" : "xyz", 
     "UnitName" : "pqr" 
    } 
} 

更新時間: 對於增加新的領域和陣列成員,

假設我們有原始文檔

{ 
    _id: 133, 
    Name: "abc", 
    Price: 20 
} 

第1步:添加新字段:PackSizes是一個陣列

db.test.update(
    { _id : 133 }, 
    { $set : {PackSizes: [ {_id: 123, PackSizeName:"xyz", UnitName:"pqr"}]}} 
) 

第2步:推新項目陣列

db.test.update(
    { _id : 133 }, 
    { $push : { PackSizes: {_id: 124, PackSizeName:"xyz", UnitName:"pqr"}} } 
) 

,你將有

{ 
    "_id" : 133, 
    "Name" : "abc", 
    "Price" : 20, 
    "PackSizes" : [ 
     { 
      "_id" : 123, 
      "PackSizeName" : "xyz", 
      "UnitName" : "pqr" 
     }, 
     { 
      "_id" : 124, 
      "PackSizeName" : "xyz", 
      "UnitName" : "pqr" 
     } 
    ] 
} 
+0

處理器謝謝。您能否告訴我如何將PackSize添加到PackSizes []字段? –

+0

db.test.update( {_id:133}, {$ push:{PackSizes:{_id:124,PackSizeName:「xyz」,UnitName:「pqr」}}} – Disposer

+0

它創建一個錯誤 - The字段'PackSizes'必須是一個數組,但是類型爲Object ... –

1

在你的JSON結構_id是MongoDB的不可變的字段,以便在你的情況,如果你改變_id簡單id和_id代表mongo id,然後javascript可以解決你的問題

db.test.find().forEach(
      function(doc){ 
     db.upsert.update({},{"$unset:{"id":1,"Name":1,"Price":1}},false,true); 
     db.upsert.update({},{"$set":{"PackSizes":doc}},true,false)} 
     ) 

如果你實現你的輸出,那麼你首先應該取消你的文檔,然後設置更新