Sto provando a ordinare i dati per data prima e poi raggruppare su un altro campo. Non funziona per me.Quadro di aggregazione Mongo, Ordina e poi gruppo non funzionante
La domanda a cui sto cercando di rispondere è: selezionare il cid distinto più recente?
dato questi dati:
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'}})
sto facendo una partita di prima su cerchi, quindi una sorta sulla data, poi un gruppo su cid
Il risultato che sto ottenendo:
{
"result" : [
{
"_id" : 3
},
{
"_id" : 1
},
{
"_id" : 2
}
],
"ok" : 1
}
Ecco la mia analisi:
prima di corrispondenza o l'ordinamento per data, i dati erano:
"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
Dopo l'ordinamento per data, il set di dati sarebbe:
"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
Così, dopo il raggruppamento, il risultato mi aspetto è:
{
"result" : [
{
"_id" : 2
},
{
"_id" : 1
},
{
"_id" : 3
}
],
"ok" : 1
}
Quale query risolve il mio problema?
Perché la query corrente non funziona per me?
I parametri della pipeline su "aggregato" devono essere inseriti in un array o passati come oggetti indipendenti anziché un unico oggetto grande. E la tua domanda parla del raggruppamento su 'cid', ma il comando si sta raggruppando in' $ date'. – JohnnyHK
Quello era un errore di battitura. Dovrebbe essere $ group: {_id: '$ cid'} – ben39