Lo que desea es algo que se pueda lograr con el marco de agregación. La forma básica de (que es útil para otros) es:
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 } }
])
De modo que los "grupos" en los distintos valores de "messageId" mientras se toma el $first
valores límite para cada uno de los otros campos. Alternativamente, si desea el más grande, use $last
en cambio, pero para el más pequeño o el más grande por fila probablemente tenga sentido $sort
primero, de lo contrario solo use $min
y $max
si toda la fila no es importante.
Consulte MongoDB aggregate()
documentación para obtener más información sobre el uso, así como el controlador JavaDocs y la documentación del conector SpringData Mongo para obtener más información sobre el uso del método agregado y posibles ayudantes.