Estoy buscando una forma de búsqueda de una palabra clave (ej. «Henrik») en las «respuestas» de la matriz de documentos con la siguiente estructura

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

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

)

Estoy trabajando en PHP en este proyecto, y hacer como funciona esto de curso:

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

Lo que yo quiero hacer es una búsqueda sin una clave específica de las respuestas de la matriz, como este

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

Es posible hacer este tipo de consulta?
Lo siento si esto es un repost. Yo no era capaz de encontrar algunos ejemplos sobre este tema aquí o en Google.

InformationsquelleAutor Henkealg | 2011-12-19

3 Comentarios

  1. 6

    Yo no creo que sea posible hacer eso.

    «respuestas», una serie de documentos (como usted dice), necesita saber donde en los documentos que ella contiene para buscar el valor que especifique.

    Supongo que lo que quieres hacer es buscar Henrik’ en cualquiera de los campos de los documentos en «respuestas». En este caso creo que tu mejor opción es usar $o:

    $answers = $collection->find( array('formId' => 6, '$or' => array('answers.field1'=> 'Henrik', 'answers.field6' => 'Henrik', 'answers.field7' => 'Henrik')));
    • Supongo que es lo más cercano que va a venir, y que sólo podría trabajar para mí. Gracias!
  2. 5
    $answers = $collection->find( array('formId' => 6, 
               'answers'=>
                          array('$in' => array('Henrik'))));
    • Esta es la respuesta correcta, hoy en día el controlador funciona perfecto con este
  3. 2

    No es una solución, pero una solución: suponiendo que sus claves son tan arbitraria como campo1, field6, usted podría dejar de usar claves y almacenar los valores en una matriz normal:

    'answers' => array(
        'Henrik',
        '[email protected]',
        'my city address'
    )

    En el que caso de que su consulta:

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

    encontraría documentos donde ‘Henrik’ fue uno de las respuestas.

Dejar respuesta

Please enter your comment!
Please enter your name here