2016-09-06 33 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

相关问题