我正在使用$ match of aggregation。 我试过这个。
$match : {
$not: {
'A': false,
'B': 'condition'
}
}
但不像nand那样工作。它的工作原理不是A而不是B. 如何查询Not(A和B)?
答案 0 :(得分:2)
$ not运算符不会反转复杂表达式。 您需要使用$和或$或复杂表达式。
使用逻辑规则,我们知道以下内容是相同的:
not ( A and B ) = not A or not B
使用MongoDB查询语言,您将拥有:
db.collection.find({$or:[{"a":{"$ne":false}},{"b":{"$ne":"condition"}}]})
OR simplifying the double boolean:
db.collection.find({$or:[{"a":true},{"b":{"$ne":"condition"}}]})
使用MongoDB聚合框架,您将拥有:
db.collection.aggregate([{"$match":{$or:[{"a":{"$ne":false}},{"b":{"$ne":"condition"}}]}}])
OR again, simplified to:
db.collection.aggregate([{"$match":{$or:[{"a":true},{"b":{"$ne":"condition"}}]}}])
答案 1 :(得分:1)
这应该取得结果
{
$or: [
{'a': { $ne: 1} },
{'b': { $ne: 2} }
]
}
但是,这个表达式并没有在我的案例中产生预期的结果,所以我尝试了这个 -
{
$nor: [
{
$and: [
{a: 1},
{b: 2}
]
}
]
}
答案 2 :(得分:1)
使用mongoDB创建NAND有一个非常简单的技巧:
$nor : { $and [..., ...] }
答案 3 :(得分:-1)
你可以用mongodb的其他方式考虑可用的选项。
db.Collection.find({'arrary.a':{$exists:false},'arrary.b':{$exists:false}})
希望这会对你有所帮助......