2014-02-20 129 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}}); 

    } 
});