2015-06-24 49 views
2

我的JSON目前看起來像這樣的內部:如何推動新的項目,一個數組的對象

{ 
    "_id" : 393, 
    "item" : 34, 
    "comments" : [ 
     { 
      "name" : "kevin", 
      "messages" : [ 
       "item", 
       "item" 
      ] 
     }, 
     { 
      "name" : "ryan", 
      "messages" : [ 
       "item", 
       "item" 
      ] 
     } 
    ] 
} 

我怎麼能推新的項目到消息陣列的意見數組中的第一個或第二個項目?

db.newcon.update({_id: 393}, { $push: { comments['kevin']: {messages: 39 } } }) 
+2

有在你的結構沒有'kevin'關鍵。你必須找到哪些評論陣列條目包含凱文,然後推入。 –

+0

你想在'messages'中添加'39',其中'comments.name:kevin'對嗎? – Yogesh

+0

這是正確的@yogesh –

回答

4

使用$elemMatch$運營商可以更新您的文檔檢查以下查詢:

db.collectionName.update({"_id":393,"comments":{"$elemMatch":{"name":"kevin"}}}, 
         {"$push":{"comments.$.messages":39}}) 
1

像這樣將工作:

var newMessage = '39'; 
comments.forEach(function(item) { 
    if (item.name === 'kevin') { 
     item.comments.push(newMessage); 
    } 
}); 
+0

嗨這也有可能使用mongo查詢不需要'forEach'在每個文件上。在這裏,OP沒有解釋需要的預期輸出。 – Yogesh

+0

這是一種選擇,因爲javascript是其中一個標籤,我不知道mongodb可能有數組,因爲我沒有使用過mongodb。 –

相關問題