流星客户端中mongodb选择器的替代方案

时间:2014-02-20 22:10:50

标签: javascript mongodb meteor

该查询的替代方案

Polls.update({_id: id, "choices.option" : choice}, {$set : {"choices.$.vote_count" : updated_count}});

在流星客户端中运行。由于meteor不再允许除id之外的任何其他选择器。在这种情况下这是一个问题,特别是因为我不知道数组索引,我试图通过使用另一个变量来获取它。

2 个答案:

答案 0 :(得分:3)

从Meteor 0.7.1开始,您可以在客户端上执行位置更新,但是您必须使用meteor方法包装调用。这是因为Meteor不允许在不受信任的代码1

中使用任何非id选择器

确保文件在clientserver都可用,因为客户端版本会模拟效果(ala延迟补偿)。

例如,

Meteor.method({
 "poll.updateChoice": function(id, choice, updated_count){
     Polls.update({_id: id, "choices.option" : choice}, 
       {$set : {"choices.$.vote_count":updated_count}});

  }
});

答案 1 :(得分:1)

可能有更好的方法,但你可以修改现有的数组,然后再修改$set

var choices = Polls.findOne(id).choices;

_.each(choices, function(c) {
  if (c.option === choice) {
    c.vote_count = updated_count;
  }
});

Polls.update(id, {$set: {choices: choices}});