У меня возникли проблемы с этим запросом к MongoDB с использованием синтаксиса массивов PHP. Это прямая версия запроса, который я хочу использовать.
db.collection.find({
$or: [
{$and : [{X:1}, {X: {$gt: 100}}]},
{$and : [{X:2}, {X: {$lt: 100}}]}
]
});
Примечание: реальный запрос сложнее, это просто пример.
Я не смог найти примеров, описывающих этот тип запроса в PHP. Лучшее, что мне удалось найти, это следующее:
$query = array(
'$or' => array(
array(
'$and' => array(
array('X' => 1),
array('X' => array('gt' => 100))
)
),
array(
'$and' => array(
array('X' => 2),
array('X' => array('lt' => 100))
)
),
)
);
$this->db->collection->find($query);
Но этот запрос не возвращает никаких результатов.
Очевидно, что мы не можем удалить $and
из массива, потому что мы не можем иметь дублирующиеся ключи в массиве PHP.
Я не хочу использовать выражения JavaScript, потому что скорость работы критична.
UPDATE: Как указал Александр Азаров в комментариях, мой исходный запрос можно написать по-другому. Я обновил вопрос с правильно использованным $and
запросом.