2016-09-06 80 views
0

我手動創建一個蒙戈集合的對象:如何的ObjectId屬性添加到一個數組中的每個對象

{ 
    "messages": [ 
     { 
      "url":"http://test.test.com", 
      "message":"test message" 
     } 
    ], 

    ....other properties 
} 

我想一個_id:ObjectId()添加到我的消息數組和每個每個項目收集文件。

我想:

collection.update({}, { 
        $set: { 
         'messages.$._id': ObjectId(), 
        }, 
       }, { multi: true } 

,但是這是行不通的。當我通過Mongoose添加新的時候,Id會被添加,但是這些都是手動輸入到mongo中的。任何幫助表示讚賞。

回答

0

你的語法是正確的,但爲了使用$位置操作數組字段必須出現在查詢文檔的一部分,check in documentation.

試試這個:

db.collection.update({messages: {$exists: true }}, 
        {$set: { 'messages.$._id': ObjectId() } }, 
        {multi: true} 
) 
+0

我所有的數據有消息數組與他們的數據....不需要確保它存在。 – CSharpAtl

+0

仔細檢查我的答案,您需要在查詢中包含數組字段,以便使用$運算符,這就是爲什麼,一個簡單的解決方案是檢查消息字段的存在。 – sergiuz

相關問題