Det, du ønsker, er noget, der kan opnås med aggregeringsrammen. Den grundlæggende form for (som er nyttig for andre) er:
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 } }
])
Så "grupperer" på de forskellige værdier af "messageId", mens du tager $first
grænseværdier for hvert af de andre felter. Alternativt, hvis du vil have den største, så brug $last
i stedet, men for enten den mindste eller den største efter række giver det sandsynligvis mening at $sort
først, ellers skal du bare bruge $ min
og $max
hvis hele rækken ikke er vigtig.
Se MongoDB aggregate()
dokumentation for mere information om brug, samt driver JavaDocs og SpringData Mongo connector dokumentation for mere brug af den samlede metode og mulige hjælpere.