我的文档结构如下:
{
"_id" : ObjectId("555d93b52804d78810c20867"),
"username" : "my user",
"myClub" : {
"myPlayers" : [
{
"_id" : ObjectId("555d93b52804d78810c20868"),
"skill" : 55,
"stamina" : 50,
"moral" : 100,
"pos" : null,
},
{
"_id" : ObjectId("555d93b52804d78810c20868"),
"skill" : 55,
"stamina" : 50,
"moral" : 100,
"pos" : null,
},
...
我想做这样的更新:
我有5个这样的文档,我想在所有“myPlayers”数组中将技能数55更新为60(当前数字加5),但条件如下:
我希望最大数量更新为100,并且只有那些pos为null的人,这意味着我有这个:
"_id" : ObjectId("555d93b52804d78810c20868"),
"skill" : 100,
"stamina" : 50,
"moral" : 100,
"pos" : null
我不想要加5。
我需要申请处理此代码的代码是什么? 当我想在我的所有文档中添加对象时,我有类似的东西:
this.model('User').update({},{ '$push': { 'myClub.myPlayers': {another user obj here }}},{multi:true ,upsert:true},function(err,numEffected){
console.log('addPlayer, numEffected:',numEffected);
});
它与那个相似吗?
答案 0 :(得分:1)
尝试使用给定条件查询myPlayers
数组的用户mongoose模型,并使用生成的游标更新每个数组元素的技能字段:
var query = {
"myClub.myPlayers.pos": {"$eq": null},
"myClub.myPlayers.skill": {"$lt": 100}
}, opts = {};
User.find(query, opts, function (err, res){
if (err) return handleError(err);
res.forEach(function (err, doc){
if (err) return handleError(err);
for(var i in doc.myClub.myPlayers){
if(doc.myClub.myPlayers[i].skill < 100){
doc.myClub.myPlayers[i].skill += 5;
}
}
doc.save();
});
});