3

嗨,我不明白为什么这不起作用?

Notifications.update({'userId':Meteor.userId(), 'notifyUserId':notifyFriendId}, {$set: {read: 1}});

我也有更新允许方法

Notifications = new Meteor.Collection('Notifications');

Notifications.allow({
  update: function(userId, doc) {
    return true;
  }
});

出现错误:

Uncaught Error: Not permitted. Untrusted code may only update documents by ID. [403] 
4

2 回答 2

6

要更新集合,您只能使用文档的_id. 所以你需要先查询它

var docid = Notifications.findOne({'userId':Meteor.userId(), 'notifyUserId':notifyFriendId});
Notifications.update({_id:docid._id}, {$set: {read: 1}});

这仅适用于在客户端上运行的代码。在服务器上,您可以按原样运行代码。

于 2013-06-22T15:14:01.080 回答
1

只是为了更新上面的答案:

var documentIdentifiers = _.pluck(Documents.find({ param: 'yourParam'}, { fields: { _id: 1 }}).fetch(), '_id');
for (var i = 0; i < documentIdentifiers.length; i++)
  Documents.update(documentIdentifiers[i], { $do: whatever });

如果您需要更新多个字段,这就是您要做的。下划线 pluck 方法与字段说明符一起使用,确保数据不会被不必要地运送。

尽我所能,

山姆

于 2014-01-09T22:47:33.457 回答