使用mongoDB中的新键更新对象数组

时间:2012-12-20 20:49:14

标签: mongodb insert updates

与此question

类似

掌握数据集,我有类似的东西:

{
    'user_id':'{1231mjnD-32JIjn-3213}',
    'name':'John',
    'campaigns':
        [
            {
                'campaign_id':3221,
                'start_date':'12-01-2012',
            },
            {
                'campaign_id':3222,
                'start_date':'13-01-2012',
            }
        ]
}

我想在campaigns中添加一个新密钥,如下所示:

{
    'user_id':'{1231mjnD-32JIjn-3213}',
    'name':'John',
    'campaigns':
        [
            {
                'campaign_id':3221,
                'start_date':'12-01-2012',
                'worker_id': '00000'
            },
            {
                'campaign_id':3222,
                'start_date':'13-01-2012',
                'worker_id': '00000'
            }
        ]
}

如何insert/update将一个新键放入一个对象数组中? 我想在数组中的每个对象中添加一个新键,默认值为00000

我试过了:
 db.test.update({}, {$set: {'campaigns.worker_id': 00000}}, true, true)
 db.test.update({}, {$set: {campaigns: {worker_id': 00000}}}, true, true)

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

我假设此操作将发生一次,因此您可以使用脚本来处理它:

var docs = db.test.find();
for(var i in docs) {
    var document = docs[i];

    for(var j in document.campaigns) {
        var campaign = document.campaigns[j];
        campaign.worker_id = '00000';
    }

    db.test.save(document);
}

脚本将遍历集合中的所有文档,然后遍历每个文档中的所有广告系列,并设置* worker_id *属性。 最后,每个文档都是持久的。

答案 1 :(得分:0)

db.test.update({}, {$set: {'campaigns.0.worker_id': 00000}}, true, true

这将更新0元素。

如果你想add a new key into every object inside the array你应该使用: $unwind

示例:

{
  title : "this is my title" ,
  author : "bob" ,
  posted : new Date() ,
  pageViews : 5 ,
  tags : [ "fun" , "good" , "fun" ] ,
  comments : [
      { author :"joe" , text : "this is cool" } ,
      { author :"sam" , text : "this is bad" }
  ],
  other : { foo : 5 }
}

展开标签

db.article.aggregate(
    { $project : {
        author : 1 ,
        title : 1 ,
        tags : 1
    }},
    { $unwind : "$tags" }
);

结果:

{
     "result" : [
             {
                     "_id" : ObjectId("4e6e4ef557b77501a49233f6"),
                     "title" : "this is my title",
                     "author" : "bob",
                     "tags" : "fun"
             },
             {
                     "_id" : ObjectId("4e6e4ef557b77501a49233f6"),
                     "title" : "this is my title",
                     "author" : "bob",
                     "tags" : "good"
             },
             {
                     "_id" : ObjectId("4e6e4ef557b77501a49233f6"),
                     "title" : "this is my title",
                     "author" : "bob",
                     "tags" : "fun"
             }
     ],
     "OK" : 1
}

您可以编写简单的更新查询。