在MongoDB查询中同时使用$or和$ne运算符

在MongoDB查询中同时使用$or和$ne运算符,mongodb,Mongodb,我正在尝试运行MongoDB查询以返回与某个值不匹配的所有文档。查阅文档后,我看到了以下示例: { $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] } 这就是我所尝试的: { $or: [ { paymentType: { $ne: "full" } }, { $ne: "partial" } ] } 这将导致一个错误: '未知的顶级运算符:$ne' 我也试过: { $or: [ { paymentType: { $ne: "full"

我正在尝试运行MongoDB查询以返回与某个值不匹配的所有文档。查阅文档后,我看到了以下示例:

{ $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] }
这就是我所尝试的:

{ $or:  [ { paymentType: { $ne: "full" } }, { $ne: "partial" } ] }
这将导致一个错误:

'未知的顶级运算符:$ne'

我也试过:

{ $or:  [ { paymentType: { $ne: "full" } }, { paymentType: { $ne: "partial" }} ] }
。。。但这只是返回所有文档,没有对“paymentType”属性进行过滤


这里的正确语法是什么?

您的第三个版本的代码语法是正确的

但逻辑似乎是错误的

您的查询已转换为:

paymentType != full or paymentType != partial
这实际上总是正确的,(因为一个
paymentType
值不能同时是
full
partial

更新


为了澄清这一点,我试图用简单的英语询问的是返回所有结果,其中“paymentType”不是“full”或“partial”

在这种情况下,您应该使用
$和
。或者
$nin
也不错

记住这条法律:

not (p or q) <=> (not p) and (not q)
非(p或q)(非p)和(非q)

因此,感谢一位评论者指出,我可以使用
$nin
$和
,但不能使用
$或
。另一个选项是
$nor
操作符,我发现在这种特殊情况下它最直观,如下所示:

{ $nor:  [ { paymentType: { $ne: "full" } }, { paymentType: { $ne: "partial" }} ] }

这将返回与这两个值都不匹配的所有文档。

如果需要查找与这两个值都不匹配的
所有
文档,为什么不简单地将
$或
更改为
$和
?最简单和最短的方法是按照前面的建议使用
$nin
,但不确定为什么要用
$nor
/
$或
等将其复杂化

{ $and:  [ { paymentType: { $ne: "full" } }, { paymentType: { $ne: "partial" }} ] }
将选择与这两个值都不匹配的所有文档。它的阅读和理解要比你用
$nor
no结尾的双重否定容易得多


它说给我所有不是
完整的
和不是
部分的付款类型。如果使用
$nin

使用
$nin
匹配单个字段,则相同。类似于
{paymentType:{$nin:[“full”,“partial”]}
为了澄清,我试图查询的是——用简单的英语——返回“paymentType”不是“full”或“partial”的所有结果。然后use必须使用
$和
。或者像上面建议的那样使用
$nin
,这可能是正确的方法,正如上面建议的:{paymentType:{$nin:[“full”,“partial”]}很好。如果我在这里使用运算符,它应该是$,而不是$或。实际上,更好的是,$nor运算符:{$nor:[{paymentType:{$ne:{$ne:{$full}},{paymentType:{$ne:{$partial}]}我想这部分是主观偏好。对我来说,在心理上,$nor比$and更接近于我头脑中的逻辑,因此我在使用$or而不是$and时犯了错误。我很想知道为什么这会被降低。一点背景知识会有所帮助。