允许规则更新meteor mongodb

时间:2016-10-20 05:11:18

标签: mongodb meteor

浏览器控制台说:

  

更新失败:访问被拒绝

下面的代码应该允许客户端将value数组的值设置为undefined,但它会因上述错误而失败。
知道为什么以及如何解决它?感谢

//client
const doc = myCol.findOne({element: 'abc'});
myCol.update({_id: doc._id}, {$set: {value: undefined}});

//server
myCol.allow({
   update: function(userId, doc, fields, modifier) {
      console.log(modifier);  //  -----=>  { '$set': {} }  --------------why?
      let edits = {$set: {value: undefined}};

      const userVarified = (userId && doc.userId == userId);
      const ABC = (doc.element === 'abc');
      const XYZ = (doc.action === 'xyz' && doc.element === 'x' && doc.name === 'y' && _.difference(fields, ['values]).length === 0);
      try {
         if (userVarified) {
            if (ABC) {
               check(modifier, Match.OneOf(edits));
             } else if (XYZ) {
               return true;
             }
         }
      } catch (e) {
         return false;
      }
      return true;
    }
 });

编辑1
当服务器获取修饰符时,修饰符为{ '$set': {} }。知道为什么吗?

编辑2
根据Mikkel的回答,修正了错误"编辑1"。
代码现在使用修饰符{ '$set': { value: '' } }

现在表达式check(modifier, Match.OneOf(checkEdit));给出了错误但我希望它匹配,因为客户端发送的内容与console.log(modifier)相同。
知道为什么它是假的吗?

固定
import { Match } from 'meteor/check'已添加到文件顶部并且 改为使用Match.test(modifier, checkEdit);

1 个答案:

答案 0 :(得分:2)

尝试将值设置为' undefined'非感性,Mongo不允许你这样做。

我认为你应该使用$ unset,根据mongo docs:

  

$ unset $ unset运算符会删除特定字段。请考虑以下语法:

     

{$ unset:{:"",...}} $ unset中的指定值   表达式(即"")不会影响操作。

     

要在嵌入文档或数组中指定a,请使用dot   符号

https://docs.mongodb.com/manual/reference/operator/update/unset/