Запрос MongoDB с несколькими операторами $and в PHP

У меня возникли проблемы с этим запросом к 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 запросом.

5
задан JakeGould 7 December 2017 в 00:01
поделиться