2014-02-20 33 views
0

MongoDB的选择会是什么这个的替代查询的替代流星客户

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

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

回答

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}}); 
+0

是啊,我真的不希望,虽然走这条路。但我可能必须像现在这样。 – user1952811

+0

我最终走上了类似的路线,所以我会接受你的答案。 – user1952811

3

从Meteor 0.7.1开始,您可以在客户端上执行位置更新,但是您必须将呼叫包装在流星方法中。这是因为流星不允许不信任代码的任何非ID选择1

确保文件上均可clientserver,为具有客户端版本将模拟效果(ALA延迟补偿) 。

例如,

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

    } 
});