2014-01-13 65 views
1

我想更新mongodb中的數組元素。在MongoDB的外殼這部作品:以安全模式更新MongoDB中的數組

db.ipolls.update({_id:"5Qu9fXG84tNSZo7sv","players.label":"R1"},{$inc:{"players.$.score":1}}); 

但是當我在流星運行此:

Ipolls.update({_id:pollster,"players.label":notChosen.label},{$inc:{"players.$.comparisons":1}}); 

我得到的錯誤:未捕獲的錯誤:不允許。不受信任的代碼只能通過ID更新文檔。 [403]

是否有可能在客戶端運行此查詢?

回答

0

在客戶端上,您只能使用_id字段作爲選擇器。您已使用{_id:pollster,"players.label":notChosen.label}

這是一個流星的事情,它只是爲了讓它更安全。理論上你可以創建一個奇怪的選擇器,並從.allow規則檢查中獲取信息,但情況並非如此。

查詢爲第一文檔,然後用它來更新它:

var doc_to_update = Ipolls.findOne({_id:pollster,"players.label":notChosen.label}); 
Ipolls.update({_id: doc_to_update._id},{$inc:{"players.$.comparisons":1}}); 
+0

我被包括所述選擇器的第二半,這樣我就更新該陣列的正確的元素。如果不在選擇器中,我如何選擇正確的元素?如果我嘗試你的建議,我得到:沒有包含數組對應的查詢字段不能適用的位置操作。 –

+0

我沒有看到你在使用'$'操作符。 '''運營商尚不支持流星在客戶端。有關於這個GitHub的一個突出問題:https://github.com/meteor/meteor/issues/153 – Akshat

+0

它支持在服務器端,所以你可以使用的方法/調用接口的命令,一直到服務器 – Akshat