Използвам $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