Mam bazę danych studentów i ich dane kontaktowe. Próbuję znaleźć kod pocztowy, w którym mieszka większość studentów. Dokumenty dla studentów wyglądać tak ...agregacja mongodb sortowanie
{studentcode: 'smi0001', imię: 'bob', nazwisko: 'Smith', kod pocztowy: 2001}
I że mogę użyć ramy agregacji, aby dowiedzieć się pocztowego z większości studentów robiąc coś podobnego ...
db.students.aggregate({$project: { postcode: 1 }, $group: {_id: '$postcode', students: {$sum: 1}}})
to działa zgodnie z oczekiwaniami (zwraca kody pocztowe jak _id
oraz liczbę uczniów w każdy kod pocztowy to "studenci", ale jeśli dodaję $sort
do potoku, wydaje się, że próbuję sortować według całej kolekcji uczniów zamiast wyników operacji $group
.
co próbuję wyglądać ...
db.students.aggregate({$project: { postcode: 1 }, $group: {_id: '$postcode', students: {$sum: 1}}, $sort: {_id: -1}})
ale zwraca całą kolekcję i pomija $project
i $group
... jestem brakuje czegoś? Myślałem, że będę mógł sortować według malejącej liczby studentów i zwrócić pierwszy przedmiot. Z góry dziękuję za pomoc.
Dziękuję za porady. Nie mogę uwierzyć, że to był po prostu niesłuszny problem z nawiasami. Są to problemy, z którymi miałem do czynienia podczas nauki języka SQL 15 lat temu, przejście do mongody oznaczało pozostawienie tylu wcześniejszych informacji, ale sądzę, że warto. Pozdrawiam, –
Działa na Twój przypadek użycia, ale to podejście nie zawsze gwarantuje oczekiwane rezultaty. Na przykład wyniki będą niepoprawne, gdy zachodzi potrzeba grupowania według 'field1', ale zachowaj je posortowane według' field2'. – astronaut
Posiadałem kody pocztowe POST1, POST2, POST3, każdy kod pocztowy ma inną niż liczba studentów. Jakie powinno być moje zapytanie sortujące, aby uzyskać sumę poszczególnych testów POST. db.test.aggregate ( {$ grupa: {_id: {'kody pocztowe:' $ kody pocztowe}}, studenci: {$ suma: 1}}}, Co powinno być zapytaniem sortowania tutaj: ); –