Tengo una base de datos de estudiantes y sus datos de contacto. Estoy tratando de averiguar el código postal que alberga a la mayoría de los estudiantes. Los documentos para los estudiantes ven algo como esto ...agregación mongod sort
{studentcode: 'smi0001', nombre: 'Bob', el apellido: 'Smith', Código postal: 2001 }
I pensé que podía utilizar el marco de la agregación para averiguar el código postal con el mayor número de estudiantes por hacer algo así ...
db.students.aggregate({$project: { postcode: 1 }, $group: {_id: '$postcode', students: {$sum: 1}}})
esto funciona como se espera (devuelve los códigos postales como _id
y el número de estudiantes en cada código postal como 'estudiantes', pero si agrego $sort
a la tubería, parece que intente ordenar por toda la colección de estudiantes en lugar de los resultados de la operación $group
.
lo que estoy tratando mirada como ...
db.students.aggregate({$project: { postcode: 1 }, $group: {_id: '$postcode', students: {$sum: 1}}, $sort: {_id: -1}})
pero devuelve toda la colección y descarta el algo $project
y $group
... me falta? Pensé que podría ordenar por el número descendente de estudiantes y devolver el primer artículo. Gracias de antemano por cualquier ayuda.
Muchas gracias por el consejo. No puedo creer que sea solo un problema de soporte extraviado. Este es el tipo de problemas que solía tener para aprender SQL hace 15 años, mudarme a mongodb ha significado dejar atrás tanto conocimiento previo, pero creo que valdrá la pena. Cheers, –
Funciona para su caso de uso, pero este enfoque no siempre garantiza los resultados que espera ver. Por ejemplo, los resultados serán incorrectos cuando deba agrupar por 'campo1' pero guárdelos por' campo2'. – astronaut
Tenía códigos postales POST1, POST2, POST3, cada código postal tiene diferente número de estudiantes. Cuál debería ser mi consulta de clasificación para obtener la suma de cada POST. db.test.aggregate ( {$ group: {_id: {'postcodes': '$ postcodes'}, estudiantes: {$ sum: 1}}}, ¿Cuál debería ser la consulta de ordenación aquí. ); –