【发布时间】:2017-06-18 15:32:00
【问题描述】:
我收到此错误:
“无法识别的逻辑运算符:$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
由于某种原因我还不能确定,我可以将错误追溯到 Mongo 编译查询,将其映射到逻辑运算符($and、$or)而不是元素(比较查询)运算符($in、$eq )
【问题讨论】:
-
我认为没有特定文档
_id的流星不允许这种更新。此外,在浏览器客户端中的 Minimongo 中可能无法正常工作,但这是“服务器端”的有效语法。所以也许你应该使用服务器方法。 -
好吧,文档中的示例没有传递 id,它适用于所有匹配的文档。另外(忘了提)这是一个客户端集合(传递 {connection: null} 作为第二个参数),将在帖子中更新它。
-
我认为您在这里混淆了文档来源。 MongoDB 核心文档列出了
$pull的正确语法选项,这是一个有效的语句。 Meteor.update()在不包含特定文档_id时认为“不受信任的”客户端代码无效。除非您特别保护该方法,否则将不允许这样做。我认为您确实需要以Server method 的身份执行此操作 -
我还特意删除了 MongoDB 标签,因为这种情况下的语法实际上是 Meteor 特定的。作为对 MongoDB 的单独查询,它是完全有效的。
-
所以这是一个local collection,它只存在于客户端,所以从服务器调用它在这种情况下实际上不起作用:(插入和删除方法也不起作用如果这实际上是服务器中的一个集合,则出于您提到的安全原因而工作
标签: javascript meteor minimongo