Mongodb PHP-запрос, поиск в массиве? - PullRequest
3 голосов
/ 19 декабря 2011

Я ищу способ поиска по ключевому слову (например, "Henrik") в массиве "ответов" документов со следующей структурой

Array
(
[_id] => MongoId Object
    (
        [$id] => 4eeedd9545c717620a000007
    )

[formId] => 6
[respId] => 4eeedd95c93228
[dateCreated] => 2011-10-14 07:45
[answers] => Array
    (
        [field1] => Henrik
        [field6] => myemail@domain.com
        [field7] => my city address
    )

)

Я работаю в PHP над этим проектом, и, конечно, я делаю следующие запросы:

$answers = $collection->find( array('formId' => 6, 'answers.field1'=> 'Henrik' ) );

То, что я хочу сделать, это поиск без определенного ключа массива ответов, как это

$answers = $collection->find( array('formId' => 6, 'answers'=> 'Henrik' ) );

Возможно ли выполнить этот тип запроса? Прошу прощения, если это репост. Я не смог найти ни одного примера по этому поводу здесь или в Google.

Ответы [ 3 ]

6 голосов
/ 19 декабря 2011

Не думаю, что это возможно.

«ответы», являясь массивом документов (как вы говорите), должны знать, где в документах, которые он содержит, искать указанное вами значение.

Я предполагаю, что вам нужно искать «Хенрик» в любом из полей документов в «ответах». В этом случае я думаю, что вам лучше всего использовать $ или:

$answers = $collection->find( array('formId' => 6, '$or' => array('answers.field1'=> 'Henrik', 'answers.field6' => 'Henrik', 'answers.field7' => 'Henrik')));
5 голосов
/ 24 апреля 2013
$answers = $collection->find( array('formId' => 6, 
           'answers'=>
                      array('$in' => array('Henrik'))));
2 голосов
/ 19 декабря 2011

Не решение, а обходной путь: предполагая, что ваши ключи произвольны, как field1, field6, вы можете прекратить использование ключей и сохранить значения в обычном массиве:

'answers' => array(
    'Henrik',
    'myemail@domain.com',
    'my city address'
)

В этом случае ваш запрос:

$answers = $collection->find( array('formId' => 6, 'answers'=> 'Henrik' ) );

найдет документы, где «Хенрик» был одним из ответов.

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