Quello che vuoi è qualcosa che può essere ottenuto con il framework di aggregazione. La forma base di ( che è utile agli altri ) è:
db.collection.aggregate([
// Group by the grouping key, but keep the valid values
{ "$group": {
"_id": "$chainId",
"docId": { "$first": "$_id" },
"messageId": { "$first": "$messageId" },
"createOn": { "$first": "$createdOn" }
}},
// Then sort
{ "$sort": { "createOn": -1 } }
])
In modo che "gruppi" sui valori distinti di "messageId" mentre si prende il $first
valori limite per ciascuno degli altri campi. In alternativa, se vuoi il più grande, usa $last
invece, ma per riga più piccola o più grande probabilmente ha senso $sort
prima, altrimenti usa $min
e $max
se l'intera riga non è importante.
Vedi MongoDB aggregate()
documentazione per ulteriori informazioni sull'utilizzo, nonché la documentazione del driver JavaDocs e del connettore SpringData Mongo per un maggiore utilizzo del metodo aggregato e dei possibili aiutanti.