Я пытаюсь выполнить запрос, состоящий из двух $or
:
|--------------------
| Date1 | Date2 |
|--------------------
| NULL | NULL | *
| NULL | TODAY | *
| NULL | TOMRW |
| TODAY | TODAY | *
| TODAY | NULL | *
| TOMRW | NULL |
|--------------------
(Я отметил строки, которые соответствуют звездочке)
(Date1 == null || Date1 <= today) && (Date2 == null || Date2 <= today)
Я не уверен, как выразить этот запрос в MongoDB.
Его можно разбить на два отдельных запроса, которые делают именно то, что они должны:
{
"$or": [{
"Date1": {
"$exists": false
}
},
{
"Date1": {
"$exists": true,
"$lte": new Date("2012-01-07T04:45:52.057Z")
}
}]
}
и
{
"$or": [{
"Date2": {
"$exists": false
}
},
{
"Date2": {
"$exists": true,
"$lte": new Date("2012-01-07T04:45:52.057Z")
}
}]
}
Оба из них выбирают правильный набор документов - я просто не знаю, как выполнять их как один запрос.
Моя первоначальная мысль заключалась в том, чтобы сделать такой запрос:
{
$and: [orQuery1, orQuery2]
}
Использование запроса $and
возвращает 0 результатов. Было объяснено, почему здесь в этой теме: $и запрос не возвращает результат
Также в этом потоке было сделано предложение сделать такой запрос:
{
Key: {valToMatch1: 1, valToMatch2: 2}
}
Но я не думаю, что $or
может быть выполнен таким образом.
Итак, возникает вопрос: как мне построить свой запрос, чтобы я мог объединить два $или в один запрос?
(Его очень поздно, поэтому я надеюсь, что этот вопрос имеет смысл.)