Mongodb php查询,在数组中搜索?

Hen*_*alg 3 php mongodb mongodb-php

我正在寻找一种方法来搜索具有以下结构的"answers"文档数组中的关键字(例如"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
    )

)
Run Code Online (Sandbox Code Playgroud)

我在这个项目上使用PHP工作,当然这样查询:

$answers = $collection->find( array('formId' => 6, 'answers.field1'=> 'Henrik' ) );
Run Code Online (Sandbox Code Playgroud)

我想要做的是搜索没有答案数组的特定键,像这样

$answers = $collection->find( array('formId' => 6, 'answers'=> 'Henrik' ) );
Run Code Online (Sandbox Code Playgroud)

是否可以进行此类查询?如果这是转贴,我很抱歉.我无法在此处或在Google上找到任何关于此的示例.

civ*_*ilu 6

我不认为这样做是可能的.

"答案",作为一个文档数组(正如你所说),需要知道它所包含的文档中的哪个位置来查找你指定的值.

我认为你想要做的是在"答案"中的文档的任何字段中查找"Henrik".在这种情况下,我认为你最好的选择是使用$或:

$answers = $collection->find( array('formId' => 6, '$or' => array('answers.field1'=> 'Henrik', 'answers.field6' => 'Henrik', 'answers.field7' => 'Henrik')));
Run Code Online (Sandbox Code Playgroud)


小智 5

$answers = $collection->find( array('formId' => 6, 
           'answers'=>
                      array('$in' => array('Henrik'))));
Run Code Online (Sandbox Code Playgroud)