Mongodb запрос от php - не получается заставить его работать - PullRequest
3 голосов
/ 28 января 2012

Попытка выполнить простой запрос mongodb, который сводит меня с ума .... У меня есть следующая таблица / db:

[_id] => MongoId Object (
    [$id] => 4f22efa1ef9dec8495b374bc
)
[h1] => a
[h2] => b
[h3] => c

[_id] => MongoId Object (
    [$id] => 4f22efa1ef9dec8495b374bd
)
[h1] => d
[h2] => e
[h3] => f

Используя командную строку mongo tool и набрав:

db.things.find({$or: [{'h1' : 'a'},{'h1': 'd'}]})

Я получаю:

{ "_id" : ObjectId("4f22efa1ef9dec8495b374bc"), "h1" : "a", "h2" : "b", "h3" : "c" }
{ "_id" : ObjectId("4f22efa1ef9dec8495b374bd"), "h1" : "d", "h2" : "e", "h3" : "f" }

Что хорошо. Однако, пытаясь сделать то же самое с PHP, я ничего не получаю ??:

$m = new Mongo();
$db = $m->selectDB('testdb');
$collection = new MongoCollection($db, 'things');
$query = array( '$or' => array( array('h1' => 'a')), 
                                array('h1' => 'd'));
$cursor = $collection->find($query);

Я не вижу, что я делаю неправильно, но я пытался (или я так думаю) уже 3 дня, и это не сработает. Если я выполняю запросы, используя '> =' '<=' '<>' '<' '>', это работает нормально, но с использованием '=', как в данном случае - нет.

Спасибо за ваши усилия!

1 Ответ

3 голосов
/ 28 января 2012

Вам лучше использовать $ in для вашего данного примера, то есть:

$collection->find(array('h1' => array('$in' => array('a', 'd'))));

Что касается того, почему ваш запрос не работает - вы не используете $ или неправильно (или вообще не используете). Это вопрос, который вы задали в переформатированном вопросе:

$query = array(
   '$or' => array(
        array('h1' => 'a')
    ), 
    array('h1' => 'd')
);

В то время как вам понадобится:

$query = array(
   '$or' => array(
        array('h1' => 'a'),
        array('h1' => 'd')
    )
);

Если вы заглядываете в журнал ошибок mongodb, скорее всего, он что-то говорит о недопустимом свободном массиве верхнего уровня в условиях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...