PHP - Mongo - $o

Estoy usando PHP/Mongo para consultar un conjunto de datos como el siguiente:

{
  description:
  {
    0:
      {level: (some int 0-50)},
    1:
      {level: (some int 0-50)},

  ...

    n:
      {level: (some int 0-50)}
   }
 }

¿Cómo escribo la función, en php, que generará una consulta dinámica que busca un nivel 40 y superior, usando $or y según la cantidad de claves descriptivas (0 ... n)?

Lo que tengo actualmente para una consulta manual no funciona (presiento que es porque en algunas entradas la descripción 1, 2, 3 no existe):

find("$or":{"description.0.level":[40,41,42,43,44,45,46,47,48,49,50],"descriptio‌​n.1.level":[40,41,42,43,44,45,46,47,48,49,50],"description.2.level":[40,41,42,43,‌​44,45,46,47,48,49,50],"description.3.level":[40,41,42,43,44,45,46,47,48,49,50]}})

Me da un error:

Error fatal: excepción no detectada 'MongoCursorException' con el mensaje '$and/$or/$nor must be a nonvacy array'

Por lo tanto, necesito una función que genere la consulta dinámicamente y funcione :).

preguntado el 12 de junio de 12 a las 18:06

2 Respuestas

La $or el valor de la consulta en sí debe ser una matriz. {$or : [...]}

Consulte el ejemplo estándar en el Documentación de MongoDB.

Probablemente también desee utilizar un operador como $in (o $lt y $gt en combinación) para seleccionar el nivel de descripción que le interesa, en lugar de enumerar cada valor.

Respondido el 13 de junio de 12 a las 08:06

Para aquellos interesados, aquí está mi código final para este problema (funciona).

$y = 0;
$descriptionLevels = 10; // set to 'n' levels as needed ...
while($y < $descriptionLevels){
    $filter['$or'][]['description.' . $y . '.level']['$in'] = range($startLevel, $endLevel);
    $y++;
}

Respondido el 19 de junio de 12 a las 20:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.