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



我需要对这个用户集合中的一个特定士兵进行更新:

例如:

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,
            }],
         }
    }
那些技能,道德和耐力应该只在特定的士兵身上改变。我如何得到$是这个士兵的索引号,从上面的更新查询缺少什么?

这就是我要找的:

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
                    }
                }

这给了我我想要的结果,在我不小心插入条件查询与更新之前…

相关内容

  • 没有找到相关文章

最新更新