Mongo获得了查询的反转

时间:2015-10-06 13:34:25

标签: javascript mongodb

您好我无法理解如何编写此查询

我的收藏是一系列条目:

{
  id:1,
  name:"peter",
  number:3
 }

我希望能够编写一个查询,该查询将返回之外的所有项目,其中name ='peter' number = 3

我知道我可以这样写:

db.test.find({$and:[{'name':'peter'},{'num':3}]})

返回所有匹配的项目,但有没有办法重写此查询以返回除匹配元素之外的所有内容?

3 个答案:

答案 0 :(得分:2)

$ not 运算符需要绑定一个字段,但在这种情况下它不起作用。 基本上我必须使用DeMorgan's law

重新考虑我的查询
  

(A ^ B)=¬(A)V-(B)

NOT(A和B)= NOT(A)OR NOT(B) 所以我的查询是

db.test.find({ $or:[{name:{$not:{$eq:'peter'}}},{num:{$not:{$eq:3}}}]});

布尔代数救援!!

答案 1 :(得分:2)

您只能使用一个涉及$nor的技巧。您唯一的声明是原始查询。这是有效的,因为$nor意味着所有条件都必须是假的;如果你只有一个条件,你会得到否定。

所以试试:

db.test.find({$nor:[{$and:[{'name':'peter'},{'num':3}]}]})

我认为这很好,因为它完全取决于原始查询的否定

答案 2 :(得分:-1)

您可以使用$ ne运算符来测试不相等:

find({$and: [{name: {$ne: peter}}, {num: {$ne: 2}}]})