Това, което искате, е нещо, което може да бъде постигнато с рамката за агрегиране. Основната форма на (която е полезна за другите) е:
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 } }
])
Така че „групира“ по отделните стойности на „messageId“, докато взема $first
гранични стойности за всяко от другите полета. Като алтернатива, ако искате най-големия, използвайте $последен
вместо това, но за най-малкия или най-големия по ред вероятно има смисъл да $sort
първо, в противен случай просто използвайте $ мин
и $max
ако целият ред не е важен.
Вижте MongoDB aggregate()код>
документация за повече информация относно употребата, както и документация на драйвера JavaDocs и SpringData Mongo конектор за повече употреба на агрегатния метод и възможни помощни средства.