Meteor中对象数组中的更新字段(mongoDB)

时间:2014-11-05 20:55:44

标签: javascript mongodb meteor

我有以下文件:

{
   "gameName":"Shooter",
   "details":[
      {
         "submitted":1415215991387,
         "author":"XYZ",
         "subPlayer":{
            "members":{
               "squad1":[
                  {
                     "username":"John",
                     "deaths":0
                  }
               ]
            },
            "gameSlug":"0-shooter"
         }
      }
   ],
   "userId":"foL9NpoZFq9AYmXyj",
   "author":"Peter",
   "submitted":1415215991608,
   "lastModified":1415215991608,
   "participants":[
      "CXRR4sGf5AdvSjdgc",
      "foL9NpoZFq9AYmXyj"
   ],
   "slug":"1-shooterConv",
   "_id":"p2QQ4TBwidjeZX6YS"
}

......以及以下Meteor方法:

Meteor.methods({
    updateDeaths: function(gameSlug, user, squad) {
            Stats.update({details.subPlayer.gameSlug: gameSlug}, ...}); // ???
    }
});

我的目标是更新字段deaths。该方法具有参数user,它是用户对象(username = user.username)。此外,参数squad是小队名称作为字符串,例如squad1

我该怎么做?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

你应该使用这样的东西:

db.collection.update(
  {'userId':'foL9NpoZFq9AYmXyj', 'details.subPlayer.gameSlug':'0-shooter'}, 
  {'$set': 
     {'details': [{
          'subPlayer': {
               'members': {
                  'squad1':[{'username':'John','death':1}]
               }
          }
       }]
     }
  }
)

UPD:

另外,也许更好的方法是使用find()。snapshot()。forEach()。但我不知道Meteor如何支持它。例如:

Stats.find({'userId':'foL9NpoZFq9AYmXyj', 'details.subPlayer.gameSlug':'0-shooter' }).map(function (e) {
    e.details.forEach(function (d) {
        var squad = 'squad1';
        d.subPlayer.members[squad].forEach(function (s) {
            s.deaths = 10000;
        });
    });
    Stats.update({'_id': e._id}, e);
});