Запрос MongoDB с $ и и несколько $ или
Как указано вдокументация, это невозможно.
И запросы с несколькими выражениями, указывающими один и тот же операторРассмотрим следующий пример:
db.inventory.find( {
$and : [
{ $or : [ { price : 0.99 }, { price : 1.99 } ] },
{ $or : [ { sale : true }, { qty : { $lt : 20 } } ] }
]
} )
Этот запрос вернет все выбранные все документы, где:
значение поля цены равно 0,99 или 1,99, а значение поля продажи равно true или значение поля кол-во меньше 20.
Этот запрос не может быть создан с использованием неявной операции AND, поскольку он использует оператор $ или более одного раза.
Что такое обходной путь для запроса что-то вроде этого? Этот запрос не возвращает результатов на MongoDB 3.2. Я тестировал $ или блоки отдельно, и они работают нормально, но не тогда, когда они заключены в $ и блок. Я предположил, что неправильно прочитал документацию, что это не должно работать. Единственная альтернатива, которую я имею, - это отправить данные в ElasticSearch и запросить их там, но это также просто обходной путь.
{
"$and": [
{
"$or": [
{
"title": {
"$regex": "^.*html .*$",
"$options": "i"
}
},
{
"keywords": {
"$regex": "^.*html .*$",
"$options": "i"
}
}
]
},
{
"$or": [
{
"public": true
},
{
"domain": "cozybid"
}
]
}
]
}