类似于这个 question

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

{
    '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)
有什么建议么?

最佳答案

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

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* 属性。
最后,每个文档都被持久化。

10-06 12:44