Ich versuche Daten zuerst nach Datum zu sortieren und dann auf ein anderes Feld zu gruppieren. Es funktioniert nicht für mich.Mongo Aggregation Framework, Sortieren und dann Gruppe funktioniert nicht
Die Frage, die ich versuche zu beantworten, ist: Wählen Sie die letzte distinkte CID?
angesichts dieser Daten:
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'}})
ich zum ersten Mal auf Kreisen ein Spiel mache, dann eine Art auf Datum, dann eine Gruppe auf cid
Das Ergebnis erhalte ich:
Hier ist meine Analyse:
vor nach Datum passend oder Sortieren, waren die Daten:
"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
Nach nach dem Datum sortiert, würde der Datensatz sein:
"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
So nach Gruppierung, ich das Ergebnis erwarten ist:
{
"result" : [
{
"_id" : 2
},
{
"_id" : 1
},
{
"_id" : 3
}
],
"ok" : 1
}
Welche Abfrage löst mein Problem?
Warum funktioniert die aktuelle Abfrage nicht für mich?
Die zu aggregierenden Pipeline-Parameter müssen entweder in ein Array eingegeben oder als unabhängige Objekte anstelle eines großen Objekts übergeben werden. Und Ihre Frage bezieht sich auf die Gruppierung auf 'cid', aber der Befehl gruppiert sich auf' $ date'. – JohnnyHK
Das war ein Tippfehler. Es sollte $ group sein: {_id: '$ cid'} – ben39