Я использую $match агрегации. и я попробовал это.
$match : {
$not: {
'A': false,
'B': 'condition'
}
}
но не работает как nand. это работает как не A и не B. Как я могу запросить Not (A и B)?
Я использую $match агрегации. и я попробовал это.
$match : {
$not: {
'A': false,
'B': 'condition'
}
}
но не работает как nand. это работает как не A и не B. Как я могу запросить Not (A и B)?
Оператор $not не инвертирует сложное выражение. Вам нужно использовать $and или $or для сложных выражений.
Используя логические правила, мы знаем, что следующие идентичны:
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"}}]}}])
Это должно принести вам результаты
{
$or: [
{'a': { $ne: 1} },
{'b': { $ne: 2} }
]
}
Однако это выражение не дало желаемого результата в моем случае, поэтому я попробовал это:
{
$nor: [
{
$and: [
{a: 1},
{b: 2}
]
}
]
}
есть очень простой трюк для создания NAND с mongoDB:
$nor : { $and [..., ...] }
вы можете думать иначе в mongodb с доступными опциями.
db.Collection.find({'arrary.a':{$exists:false},'arrary.b':{$exists:false}})
Надеюсь, что это поможет вам...
NAND
, см. jira.mongodb.org/browse/SERVER -15577 - person zamnuts   schedule 03.11.2014