浏览器控制台说:
更新失败:访问被拒绝
下面的代码应该允许客户端将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);
。
答案 0 :(得分:2)
尝试将值设置为' undefined'非感性,Mongo不允许你这样做。
我认为你应该使用$ unset,根据mongo docs:
$ unset $ unset运算符会删除特定字段。请考虑以下语法:
{$ unset:{:"",...}} $ unset中的指定值 表达式(即"")不会影响操作。
要在嵌入文档或数组中指定a,请使用dot 符号
https://docs.mongodb.com/manual/reference/operator/update/unset/