无法更新集合中的多个记录?

时间:2015-09-24 22:23:03

标签: javascript mongodb meteor

我一直收到这个错误:

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

这是代码:

Template.notifications.events({
   'click a.clearAll':function(event){
    console.log("hey");
    Notifications.update({{userId:Meteor.userId()},{$set:{read:true}},{multi:true});
 }
})

我还设置了更新权限:

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

为什么不让我更新?

2 个答案:

答案 0 :(得分:1)

出现此错误的原因是您从客户端进行更新,服务器将其视为'不受信任的代码

除非您尚未删除不安全的软件包并且未制定任何权限规则,否则它将起作用。我建议总是通过meteor remove insecure删除不安全的包并使用方法/调用来执行客户端发起的服务器功能,这是一个好习惯。

您需要从客户端向服务器发出'call',并在methods函数内执行更新命令。

客户端:

Template.notifications.events({
   'click a.clearAll':function(event){
        Meteor.call('updateDocs',
            function(error, result) {
                if (error) {
                    console.log(error);
                }
                else {
                    console.log('done');
                }
            });
    }
});

服务器:

Meteor.methods({
    updateDocs: function() {
        var userId = this.userId
        if (userId) {
            Notifications.update({{userId: userId},{$set:{read:true}},{multi:true});
        }
        return;
    }
});

答案 1 :(得分:1)

@meteorBuzz是正确的。如果您仍希望从客户端进行更新,则可以使用forEach

进行更新
Notifications.find({ userId:Meteor.userId() }).forEach(function(n){
  Notifications.update({ _id: n._id },{$set:{ read:true }});
});