Meteor mongo:不受信任的代码只能按 ID 更新文档. [403]



以下代码片段给了我错误:

Households.update({
    _id: Meteor.user().profile.myHousehold, 
    "shoppingList.name" : this.name}, 
    {"$set" : {
         "shoppingList.$.checked" : checked
    }
});

晓得?我正在按 id 更新。作为一种解决方法,我当然可以简单地替换整个阵列shoppingList,但这将是蛮力。

使用具有延迟补偿的复杂更新/删除选择器的正确模式是使用 Meteor 方法。

共享代码:

Meteor.methods({
  setHouseholdChecked: function(shoppingListName, checked) {
    check(this.userId, String);
    check(shoppingListName, String);
    check(checked, Boolean);
    Households.update({
      _id: Meteor.user().profile.myHousehold, 
      "shoppingList.name" : shoppingListName
    }, {
      $set: {
        "shoppingList.$.checked" : checked
      }
    });
  }
});

客户端代码:

Meteor.call('setHouseholdChecked', this.name, checked);

对于仅限客户端的解决方案,您可以依靠此技巧:

var households = Houseolds.find({
  _id: Meteor.user().profile.myHousehold,
  "shoppingList.name" : this.name
});
households.forEach(function(houseold){
  Households.update(houseold._id, {
    $set: {
      "shoppingList.$.checked" : checked
    }
  });
});

最新更新