Próbuję najpierw sortować dane według daty, a następnie grupować w innym polu. To nie działa dla mnie.Struktura agregacji Mongo, sortowanie, a następnie grupa nie działa
Pytanie, na które usiłuję odpowiedzieć, brzmi: Wybierz najnowszy wyraźny numer identyfikacyjny?
podane dane:
db.summary.save({"lid" : 5, "date" : 5, "cid" : 2, "circles" : [ 2 ] })
db.summary.save({"lid" : 2, "date" : 2, "cid" : 1, "circles" : [ 2 ] })
db.summary.save({"lid" : 4, "date" : 0, "cid" : 3, "circles" : [ 2 ] })
db.summary.save({"lid" : 3, "date" : 3, "cid" : 2, "circles" : [ 2 ] })
db.summary.save({"lid" : 1, "date" : 1, "cid" : 1, "circles" : [ 2 ] })
db.summary.aggregate({$match :{circles: 2}, $sort: {date: -1}, $group: {_id: '$cid'}})
robie mecz najpierw na kołach, następnie rodzajem na bieżąco, następnie grupa na cid
Wynik Dostaję:
{
"result" : [
{
"_id" : 3
},
{
"_id" : 1
},
{
"_id" : 2
}
],
"ok" : 1
}
Oto moja analiza:
przed dopasowania lub sortowania według daty, dane było:
"lid" : 5, "date" : 5, "cid" : 2
"lid" : 2, "date" : 2, "cid" : 1
"lid" : 4, "date" : 0, "cid" : 3
"lid" : 3, "date" : 3, "cid" : 2
"lid" : 1, "date" : 1, "cid" : 1
Po sortowaniu według daty, zbiór danych będzie:
"lid" : 5, "date" : 5, "cid" : 2
"lid" : 3, "date" : 3, "cid" : 2
"lid" : 2, "date" : 2, "cid" : 1
"lid" : 1, "date" : 1, "cid" : 1
"lid" : 4, "date" : 0, "cid" : 3
Więc po zgrupowania, wynik Spodziewam się:
{
"result" : [
{
"_id" : 2
},
{
"_id" : 1
},
{
"_id" : 3
}
],
"ok" : 1
}
Jakie zapytanie rozwiązuje mój problem?
Dlaczego bieżące zapytanie nie działa dla mnie?
Twoje parametry potoku do "agregatu" muszą być umieszczone w tablicy lub przekazane jako niezależne obiekty zamiast jednego dużego obiektu. A twoje pytanie mówi o grupowaniu na 'cid', ale polecenie grupuje się na' $ date'. – JohnnyHK
To był błąd. Powinien to być $ group: {_id: '$ cid'} – ben39