2012-12-21 85 views
36

我已存儲在MongoDB中以下文檔:如何將元素插入到MongoDB內部列表中?

{ 
    name: 'myDoc', 
    list: [ 
     { 
      id:1 
      items:[ 
       {id:1, name:'item1'}, 
       {id:2, name:'item2'} 
      ] 
     }, 
     { 
      id:2 
      items:[ 
       {id:1, name:'item1'}, 
       {id:3, name:'item3'} 
      ] 
     } 
    ] 
} 

我發現使用$addToSet辦法元素添加到「清單」,但我無法找到一個方法來添加到「項目」的具體列表一個物品。

例如 我得到如下:

{id:5, name:'item5'} 

,我想將它添加到元素的項目與ID列表:2。這樣做將與$push

回答

11

您可以使用此: -

> var toInsert = {id: 5, name: 'item6'} 
> db.abc.update(
      { name: 'myDoc', list: { $elemMatch: { id: 2 } } }, 
      { $addToSet: { 'list.$.items': toInsert } } 
) 

query一部分會發現從list陣列文檔與id = 2。然後我們使用$位置元素在該數組索引處添加一個新元素。

positional $ operator


您也可以只更換'list.id': 2list: {$elemMatch: {id: 2}}

但是使用$elemMatch會更好,當你想根據你的數組的多個元素進行更新。對於例如,當你的匹配標準是id有的陣列中的另一個領域說length: -

list: {$elemMatch: {id: 2, length: 5}} 
+0

腳註,嵌套的嵌入式陣列模式幾乎總是會導致問題以後,因爲不上下級元素的所有操作都可能與當前的查詢語言。我會避免它。 –