在安全模式下更新mongodb中的数组

时间:2014-01-13 11:30:37

标签: mongodb meteor

我想更新mongodb中的数组元素。在mongodb shell中,这可以工作:

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]

是否可以在客户端运行此查询?

1 个答案:

答案 0 :(得分: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}});