您好我无法理解如何编写此查询
我的收藏是一系列条目:
{
id:1,
name:"peter",
number:3
}
我希望能够编写一个查询,该查询将返回除之外的所有项目,其中name ='peter'和 number = 3
我知道我可以这样写:
db.test.find({$and:[{'name':'peter'},{'num':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}}]})