我收到了这个错误:
“无法识别的逻辑运算符:$ in”
使用此查询时:
this.update(
{}, {
$pull: {
words: {
$in:['string', 'string1']
}
}
}, {
multi: true
});
我在一个在客户端中扩展Mongo.Collection的es6类中调用,到目前为止所有其他内容(插入,删除)都有效,我不会以任何方式修改更新方法。该集合是以这样的方式声明的local collection:
WordsList = new WordCollection('words',{connection:null});)
该查询与文档here中的示例非常相似,实际上,我也可以在尝试在控制台上重新创建此示例时重现相同的错误。
我正在使用Meteor 1.4.4.1和MongoDB 3.2.12
由于某种原因,我还无法确定,我可以跟踪错误,编译将查询映射到逻辑运算符($和,$或)而不是元素(比较查询)运算符($ in,$ eq)的Mongo )
答案 0 :(得分:1)
可以修改本地集合中的多个值,但是可以使用哪些选择器或修饰符存在限制,因为客户端集合用户MiniMongo实现了MongoDB功能的子集。
这个特例是MiniMongo的缺点,其中Matcher
表达式中使用了逻辑$pull
,如$pull
实现中的注释中所示:
// XXX Minimongo.Matcher isn't up for the job, because we need
// to permit stuff like {$pull: {a: {$gt: 4}}}.. something
// like {$gt: 4} is not normally a complete selector.
// same issue as $elemMatch possibly?
(source:流星源代码)
这是从2013年开始的,因此没有PR就没有太大希望改变。
具体来说,匹配器只允许您使用逻辑选择器:"$and", "$or", "$nor", "$where", "$comment"
。这就是为什么你不能使用$in
中实现的ELEMENT_OPERATORS
。
作为一种解决方法(因为这只是客户端),您可以使用:
valueArray.forEach(val => WordsList.update({}, {$pull: {words: val}}, {multi: true}));