4

我正在寻找一种在具有以下结构的文档“答案”数组中搜索关键字(例如“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 上找到任何关于此的示例。

4

3 回答 3

7

我认为不可能做到这一点。

“答案”是一个文档数组(如您所说),需要知道它包含的文档中的哪个位置以查找您指定的值。

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

$answers = $collection->find( array('formId' => 6, '$or' => array('answers.field1'=> 'Henrik', 'answers.field6' => 'Henrik', 'answers.field7' => 'Henrik')));
于 2011-12-19T13:02:06.243 回答
7
$answers = $collection->find( array('formId' => 6, 
           'answers'=>
                      array('$in' => array('Henrik'))));
于 2013-04-24T13:27:38.863 回答
2

不是解决方案,而是一种解决方法:假设您的键与 field1、field6 一样任意,您可以停止使用键并将值存储在普通数组中:

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

在这种情况下,您的查询:

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

会找到“Henrik”是答案之一的文件。

于 2011-12-19T14:55:14.883 回答