MongoDB множественные $ и операторы запрашивают в PHP - PullRequest
5 голосов
/ 01 января 2012

У меня проблемы с этим запросом MongoDB с использованием синтаксиса массива PHP.Это прямая версия запроса, который я хочу использовать.

db.collection.find({
        $or: [
            {$and : [{X:1}, {X: {$gt: 100}}]},
            {$and : [{X:2}, {X: {$lt: 100}}]}
        ]
});

Примечание. Реальный запрос более сложный, это всего лишь пример.

Iне удалось найти несколько примеров, описывающих этот тип запроса в 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, потому что скорость критична.

ОБНОВЛЕНИЕ: Как отметил Александр Азаров в комментариях, мой оригинальный запрос может быть написан по-другому.Я обновил вопрос с помощью правильно используемого $and запроса.

1 Ответ

11 голосов
/ 02 января 2012

Вот пример кода с операторами или и и в PHP для запроса Монго.

Он использует имена полей, отличные от того, что вы собираетесьнайти в вашем запросе, но понять, как его использовать, просто.

Сейчас у меня нет времени изменить его, чтобы он соответствовал вашему запросу, но если у вас есть проблемы с этим, позвольте мнезнаю и я это отрегулирую.Этот запрос работает и находит то, что должен найти.

$arrFind = array(
    '$or' => array(
        array(
            '$and' => array(
                array(
                    UI_name => array(
                        '$regex' => 'andrew',
                        '$options' => 'i'
                    )
                ),
                array(
                    UI_surname => array(
                        '$regex' => 'mik',
                        '$options' => 'i'
                    )
                )
            )
        ),
        array(
            '$and' => array(
                array(
                    UI_surname => array(
                        '$regex' => 'andrew',
                        '$options' => 'i'
                    )
                ),
                array(
                    UI_name => array(
                        '$regex' => 'mik',
                        '$options' => 'i'
                    )
                )
            )
        ),
    )
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...