"Unrecognized logical operator: $in" Mongo.collection 更新
"Unrecognized logical operator: $in" Mongo.collection update
我收到这个错误:
"Unrecognized logical operator: $in"
使用此查询时:
this.update(
{}, {
$pull: {
words: {
$in:['string', 'string1']
}
}
}, {
multi: true
});
我在客户端中扩展 Mongo.Collection 的 es6 class 中调用,到目前为止所有其他内容(插入、删除)都有效,我没有修改任何更新方法方法。该集合是这样声明的 local collection:
WordsList = new WordCollection('words', {connection: null});)
该查询与文档 here 中的示例非常相似,实际上,我在尝试在控制台上重新创建此示例时也可以重现相同的错误。
I'm using Meteor 1.4.4.1 with MongoDB 3.2.12
出于某种原因我还不能确定,我可以将错误追溯到 Mongo 编译查询将其映射到逻辑运算符 ($and, $or) 而不是元素(比较查询)运算符($in, $eq)
可以修改本地集合中的多个值,但是可以使用的选择器或修饰符是有限制的,因为客户端集合用户 MiniMongo,它实现了 MongoDB 功能。
这种特殊情况是 MiniMongo 的缺点,其中在 $pull
表达式中使用了逻辑 Matcher
,如 $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: Meteor source code)
这是从 2013 年开始的,所以如果没有 PR 改变它的希望不大。
具体来说,匹配器只允许您使用逻辑选择器:"$and", "$or", "$nor", "$where", "$comment"
。这就是为什么你不能使用 $in
,它在 ELEMENT_OPERATORS
.
中实现
作为解决方法(并且因为这只是客户端),您可以使用:
valueArray.forEach(val => WordsList.update({}, {$pull: {words: val}}, {multi: true}));
我收到这个错误:
"Unrecognized logical operator: $in"
使用此查询时:
this.update(
{}, {
$pull: {
words: {
$in:['string', 'string1']
}
}
}, {
multi: true
});
我在客户端中扩展 Mongo.Collection 的 es6 class 中调用,到目前为止所有其他内容(插入、删除)都有效,我没有修改任何更新方法方法。该集合是这样声明的 local collection:
WordsList = new WordCollection('words', {connection: null});)
该查询与文档 here 中的示例非常相似,实际上,我在尝试在控制台上重新创建此示例时也可以重现相同的错误。
I'm using Meteor 1.4.4.1 with MongoDB 3.2.12
出于某种原因我还不能确定,我可以将错误追溯到 Mongo 编译查询将其映射到逻辑运算符 ($and, $or) 而不是元素(比较查询)运算符($in, $eq)
可以修改本地集合中的多个值,但是可以使用的选择器或修饰符是有限制的,因为客户端集合用户 MiniMongo,它实现了 MongoDB 功能。
这种特殊情况是 MiniMongo 的缺点,其中在 $pull
表达式中使用了逻辑 Matcher
,如 $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: Meteor source code)
这是从 2013 年开始的,所以如果没有 PR 改变它的希望不大。
具体来说,匹配器只允许您使用逻辑选择器:"$and", "$or", "$nor", "$where", "$comment"
。这就是为什么你不能使用 $in
,它在 ELEMENT_OPERATORS
.
作为解决方法(并且因为这只是客户端),您可以使用:
valueArray.forEach(val => WordsList.update({}, {$pull: {words: val}}, {multi: true}));