2011-01-21 19 views
13

necesito una consulta para obtener las claves distintas con ordenada en base a la puntuación en MongoDB 1.6.5obtener valores distintos con Ordenada datos

tengo discos como

{key ="SAGAR" 
score =16 
note ="test1" 
} 

{key ="VARPE" 
score =17 
note ="test1" 
} 

{key ="SAGAR" 
score =16 
note ="test2" 
} 

{key ="VARPE" 
score =17 
note ="test2" 
} 

necesito una consulta que clasifica todos los registros de puntuación y me devuelve clave distinta .....

+0

Entonces, ¿cuáles serían los resultados deseados si ejecutara esta consulta en este conjunto de datos (siempre lo mejor para mostrar al hacer preguntas de consulta) –

+0

¿Qué lenguaje de programación utiliza? –

+0

@ Bugal13 Estoy usando SCALA –

Respuesta

2

Hay distinct command en mongodb:

se pueden utilizar distintos como esto:

db.test.distinct({"key":true,"score":true,"note":true}); 

lo mismo en la base de datos relacional:

SELECT DISTINCT key,score,note FROM test; 

Y que sort result añadiendo siguiente código:

.sort({score : 1}) // 1 = asc, -1 = desc 

resultado total será de la siguiente manera:

db.test.distinct({"key":true,"score":true,"note":true}).sort({score : 1}); 
+11

Evidentemente, esto ya no es posible (v3.8.0) - produce un error que no se puede utilizar con la ordenación distinto. ¿Puedes confirmar? – cyberwombat

+5

ordenar no se puede utilizar con distinto –

+0

Hay una solicitud de función activa, vota por ello si tienes el mismo problema: https://jira.mongodb.org/browse/SERVER-2130 – UpTheCreek

9

Puede usar el marco de agregación para agrupar por el elemento que desea que sea distinto (el grupo lo distingue). Así que si desea ordenar en la puntuación a continuación, obtener claves distintas que podría hacer lo siguiente - ordenar por puntuación, grupo por la clave y añadir la puntuación como matrices de elementos (ya clasificados):

db.test.aggregate([ 
    { $sort : { score : -1 } }, 
    { $group : {_id : "$key", scores : { $push : "$score" } } } 
]) 

Esto resultará en claves distintas junto con una variedad de puntajes que son los puntajes que figuran en los documentos con claves duplicadas. No estoy seguro de que esto sea exactamente lo que estás buscando y sé que esta es una vieja pregunta, pero pensé que esto podría ayudar a alguien más a mirarla en el futuro, como una forma alternativa de hacerlo.

+0

$ push es el operador incorrecto para ese propósito. Use $ addToSet en su lugar. – user3072843

Cuestiones relacionadas