0

使用复杂值等$not操作的正确方法是什么?$ne我的意思是值,它们也是通过一些操作计算出来的。我试过{$not: {$and: [{field1: 'a'}, {field2: 'b'}]}}and {$not: [{$and: [{field1: 'a'}, {field2: 'b'}]}]},但它们似乎都不能正常工作。与$ne:相同{$ne: [field1, field2]}。文档将它们的用法示例显示为field1: {$not: {$gt: 5}},对于如此简单的情况很好,但是如何处理更复杂的情况呢?

如果它有所作为,我想在$match聚合框架的子句中使用它们,而不仅仅是在find().

升级版:

例如,我想运行这样的查询:db.test.aggregate({$match: {$not: {$and: [{f1: 'a'}, {f2: 'b'}]}}}),但它给出错误“无效运算符:$and”(相同的代码没有$not工作)。要在之前测试该查询插入文档:db.test.insert({f1:'a', f2:'b'}); db.test.insert({f1:'b', f2:'c'}).

4

1 回答 1

0

$not并且$ne是特定于字段的运算符,因此您不能将它们应用于多字段查询操作。我不认为你可以像你试图做的那样构建一个广义的“否定”查询。

相反,您需要逐个字段反转逻辑字段以使用如下查询:

db.test.aggregate({$match: {$or: [{f1: {$ne: 'a'}}, {f2: {$ne: 'b'}}]}})
于 2013-04-07T15:17:45.663 回答