如何将ObjectId属性添加到数组的每个对象

时间:2016-09-06 20:57:06

标签: mongodb mongoid

我在Mongo集合中手动创建了一个对象:

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

    ....other properties
}

我想在我的消息数组的每个项目和集合中的每个文档中添加_id:ObjectId()

我试过了:

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

但这不起作用。当我添加通过Mongoose的新增加时,ID会被添加,但这些是手动输入到mongo中的。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

您的语法是正确的,但为了使用$ positional运算符,数组字段必须作为查询文档的一部分出现,check in documentation.

试试这个:

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