4

次の構造を持つドキュメントの「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
    )

)

私はこのプロジェクトで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 に答える