2012-10-02 13 views
6

estoy realizando esta consulta mongo:MongoDB: Cómo pedir una "seleccione en" en el mismo orden que los elementos de la matriz

db.mytable.find({id:{$in:["1","2", "3", "4" ]}}); 

Devuelve todos los resultados en un orden extraño, ya que sigue:

4,3,2,1 

Necesito recuperar todos los resultados en el mismo orden que se definió en la matriz de consulta.

1,2,3,4 

¿Es posible?

+0

No es posible –

+1

Esta es la programación, todas las cosas son posibles que son sólo código relacionado. Simplemente pueden tomar tiempo. – jcolebrand

+0

no es posible que mongoDB devuelva los resultados en el orden especificado. :) –

Respuesta

1

Un par de cosas para tomar nota:

1.) MongoDB, como la mayoría de las bases de datos, no ofrece ninguna garantía sobre el orden de devolución de resultados de la consulta a menos que utilice una llamada a sort(). Si realmente desea garantizar que el resultado de su consulta se devuelva en un orden específico, deberá especificar ese orden de clasificación específico.

2.) En general, el documento actualizado/movido más reciente aparecerá al final de su conjunto de resultados, pero todavía no hay garantías. MongoDB utiliza el "orden natural" para su orden nativo de objetos y, aunque está muy cerca del orden de inserción, no se garantiza que sea el mismo.

3.) Los campos indexados se comportarán de manera diferente. Vale la pena señalar que parece que su consulta está utilizando id y no _id. El primero, _id se indexaría de manera predeterminada y id no se indexaría a menos que haya agregado explícitamente un índice a ese campo.

Puede leer más sobre clasificación y ordenar aquí de MongoDB: http://www.mongodb.org/display/DOCS/Sorting+and+Natural+Order

1

puede escribir una consulta como esta:

db.mytable.find({id:{$in:["1","2", "3", "4" ]}}).sort({id:1}) 

para tener sus resultados ORDER BY id ASC

Fuente: MongoDB Advanced Queries

Pero si lo que desea ordenar los resultados en función de su $ en la gama , intente ordenar su array $ en el orden inverso, el resultado con respecto al primer elemento de su $ in array es probable que aparezca como el último elemento de los resultados

+0

Mi lista de arreglos no tiene un orden definido, los valores también pueden ser alfanuméricos ... entonces, me temo que no será posible :( – larrytron

+0

@larrytron Si no tiene un orden definido, solo invertir es el orden, no necesita saber cómo es el orden, por ejemplo, puede usar [array_reverse] (http://php.net/manual/en/function.array-reverse.php) en PHP – YAAK

+0

Lo siento amigo, yo no entiendas tu idea. Imagina este otro ejemplo: 'db.mytable.find ({id: {$ in: [" foo "," bar "," baz "," qux "]}});' luego yo Necesito recuperar exactamente estos valores y el mismo orden que aquí (foo, bar, baz, qux) pero obtengo algo como 'qux, bar, foo, baz' ... Quiero decir, totalmente diferente. Espero que ayude a aclarar. gracias – larrytron

Cuestiones relacionadas