该查询的替代方案
Polls.update({_id: id, "choices.option" : choice}, {$set : {"choices.$.vote_count" : updated_count}});
在流星客户端中运行。由于meteor
不再允许除id
之外的任何其他选择器。在这种情况下这是一个问题,特别是因为我不知道数组索引,我试图通过使用另一个变量来获取它。
答案 0 :(得分:3)
从Meteor 0.7.1开始,您可以在客户端上执行位置更新,但是您必须使用meteor方法包装调用。这是因为Meteor不允许在不受信任的代码1
中使用任何非id选择器确保文件在client
和server
都可用,因为客户端版本会模拟效果(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}});