如何在mongodb中更新此用户集合中的此特定数据?

时间:2015-09-07 07:38:07

标签: performance mongodb stream

我需要对此用户集中的特定士兵进行更新:

例如:

user: {
     myArmy : {
        money      : 100,
        fans       : 100,
        mySoldiers : [{
            _id        : ddd111bbb,
            mySkill   : 50,
            myStamina : 50,
            myMoral   : 50,
        },       
        {
            _id        : ddd111dd ,
            mySkill   : 50,
            myStamina : 50,
            myMoral   : 50,
        }],
     }
}

我希望在我的更新查询中执行以下操作:

conditions = { _id : user._id };

update =
            { 'myArmy.mySoldiers._id' : soldierId},
            {
                '$set': {
                    'myArmy.money'      : balanceToSet,
                    'myArmy.fans'       : fansToSet,
                    'myArmy.mySoldiers.$.skill': skillToSet,
                    'myArmy.mySoldiers.$.stamina': staminaToSet,
                    'myArmy.mySoldiers.$.moral': moralToSet
                }
            }

这是最后的查询:

User.update(conditions, update, options, function(err){
     if (err) deferred.reject;
     stream.resume();
});

最终结果如果soldierId是' ddd111bbb':

user: {
         myArmy : {
            money      : 200,
            fans       : 100,
            mySoldiers : [{
                _id        : ddd111bbb,
                mySkill   : 150,
                myStamina : 250,
                myMoral   : 50,
            },       
            {
                _id        : ddd111dd ,
                mySkill   : 50,
                myStamina : 50,
                myMoral   : 50,
            }],
         }
    }

那些技能,道德和毅力应该只改变特定的士兵。 如何让$成为这名士兵的索引号,上面的更新查询中缺少什么?

1 个答案:

答案 0 :(得分:0)

这就是我想要的:

conditions = { _id : user._id , 'myArmy.mySoldiers._id' : soldierId};
                update = {
                    $set: {
                        'myArmy.balance': balanceToSet,
                        'myArmy.fans'   : fansToSet,
                        'myArmy.tokens' : tokensToSet,
                        'myArmy.mySoldiers.$.skill'  : skillToSet,
                        'myArmy.mySoldiers.$.stamina': staminaToSet,
                        'myArmy.mySoldiers.$.moral'  : moralToSet
                    }
                }

这给了我想要的结果,然后我意外地将条件查询插入更新一个......