使用MongoDB Mongoose驱动程序在对象数组中增加{key:value}

use*_*015 3 increment mongoose mongodb

我有一个类似于此的文档:

{
    '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'
            },
            ...
            etc
            ...
        ]
}
Run Code Online (Sandbox Code Playgroud)

假设我想增加数组中campaign_id的元素7 campaigns.
使用带有猫鼬驱动程序的,我想我可以这样做:

camps.findOneAndUpdate({name: "John"}, {$inc: {"campaigns.7.campaign_id": 1}}, upsert: true, function(err, camp) {...etc...});

这不会增加campaign_id.
关于增加这个的任何建议?

Joh*_*yHK 8

你有正确的想法,但你的upsert选项格式不正确.

试试这个:

camps.findOneAndUpdate(
    {name: "John"}, 
    {$inc: {"campaigns.7.campaign_id": 1}}, 
    {upsert: true},
    function(err, camp) {...etc...});
Run Code Online (Sandbox Code Playgroud)

  • 因为您不能将变量用作JavaScript立即对象中的键名.因此,您必须以编程方式构建更新对象.`var update = {$ inc:{}}; 更新.$ INC [ '活动.' + position +".campaign_id"] = 1;` (2认同)