2011-03-01 14 views
40

¿Cómo puedo tener $ u operaciones múltiples? Hasta ahora, he intentado lo siguiente, pero ignora silenciosamente el 2.º $ o.

{ 
    $or: [{a: 2}, {a: 3}], 
    $or: [{b: 5}, {b: 4}] 
} 

Supongo que es porque estoy usando dos teclas idénticas. ¿Hay alguna forma de evitar esto?

Respuesta

-2

No puede anidar varias declaraciones $ o.

Esto está documentado aquí:

http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24or

Aparte de eso: la consulta no tiene mucho sentido.

Si usted está tratando de una consulta de un ser 2 o 3 y b ser 5 o 4:

{a: {$ en: [2,3]}, b: { $ in: [4,5]}}

No intente inventar nueva sintaxis.

+0

Lo anterior era una versión simplificada de mi problema. Lo que realmente quiero hacer es buscar ** a ** entre dos valores Y ** b ** estar entre dos valores. – Mike

+0

Los '$ o' en el OP pueden no ser legales, pero están adyacentes entre sí, no anidados. – paulmelnikow

+1

También: Se modificó en la versión 2.0: puede anidar $ u operaciones; Sin embargo, estas expresiones no se optimizan tan eficientemente como las de nivel superior. – mmmdreg

-1

$ y no va a hacer el trabajo, ya que el segundo $ o no validará si el primero falla

Desde la página del Mongo:

El operador utiliza $ y evaluación de cortocircuito. Si la primera expresión (por ejemplo) se evalúa como falsa, MongoDB no evaluará las expresiones restantes.

anidada o $ embargo debe hacer el truco:

db.things.find ($ {o: [{$ o: [{ 'A': 1}, { 'b': 2}] }, {$ o: [{'a': 2}, {'b': 3}]}]})

-1

Para múltiples como en sql usamos $ in y para no usamos $ nin vc is nuestro nombre de colección aquí. Estamos encontrando que la cadena contiene una CPU o nota.

db.collection('vc').find({ "name" : { $in: [ /cpu/, /memo/ ] }  } 
Cuestiones relacionadas