【发布时间】:2015-12-05 12:13:22
【问题描述】:
我在数组中有一个文档,并尝试更新文档中的值。
它已经在 Meteor 的 Mongo shell 中工作了:
$ meteor mongo
meteor:PRIMARY> db.mycollection.update({name:"test", "foo.name":"bar"}, {$set: {"foo.$.price":42}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
但是当我尝试在 Meteor 中使用以下方法时它不起作用:
MyCollection.update(
{name:"test", "foo.name":"bar"},
{$set: {"foo.$.price":42}}
);
如您所见:http://meteorpad.com/pad/jjazD3jYYeY7R9Bpv/DocumentArrayUpdate
这是因为您不能在客户端放置与 Id 不同的选择器(使用自动发布/不安全):
Error: Not permitted. Untrusted code may only update documents by ID. [403]
这就是我迷路的地方。我必须在服务器上运行此更新代码,但到目前为止我看到的唯一示例只是在服务器的Meteor.publish() 上执行一些.find() 或.findOne(),然后所有更新逻辑都在Meteor.methods() 中完成是客户端和服务器端,所以在我的情况下我不能这样做。
我怎样才能做到这一点?
编辑:我有点快说:Meteor.methods() 既是客户端又是服务器端,所以就我而言,我不能这样做。它实际上适用于Meteor.methods(),我仍然不知道为什么,我认为它来自 Meteor 的 Optimistic UI 功能的工作原理......
【问题讨论】:
-
您已经完成了 99% 的解决方案! :) 您需要在仅在服务器上定义的方法中执行此操作。有几种方法可以做到这一点,但最简单的方法是将代码添加到应用程序的
server目录下的文件中。
标签: javascript mongodb meteor