mongodb如何用nand运算符查询?

时间:2013-12-28 03:30:03

标签: mongodb operators

我正在使用$ match of aggregation。 我试过这个。

    $match : { 
      $not: {
      'A': false,
      'B': 'condition'
      } 
    } 

但不像nand那样工作。它的工作原理不是A而不是B. 如何查询Not(A和B)?

4 个答案:

答案 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}})

希望这会对你有所帮助......