Vad du vill är något som kan uppnås med aggregeringsramverket. Den grundläggande formen av ( som är användbar för andra ) är:
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å att "grupperar" på de distinkta värdena för "messageId" medan du använder $first
gränsvärden för vart och ett av de andra fälten. Alternativt om du vill ha den största, använd $last
istället, men för antingen den minsta eller den största efter rad är det förmodligen vettigt att $sort
först, annars använd bara $ min
och $max
om hela raden inte är viktig.
Se MongoDB aggregate()
dokumentation för mer information om användning, såväl som drivrutinen JavaDocs och SpringData Mongo-anslutningsdokumentation för mer användning av den aggregerade metoden och möjliga hjälpare.