To, czego chcesz, to coś, co można osiągnąć za pomocą struktury agregacji. Podstawowa forma ( która jest przydatna dla innych ) to:
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 } }
])
Aby "grupować" różne wartości "messageId", biorąc $first
wartości graniczne dla każdego z pozostałych pól. Alternatywnie, jeśli chcesz mieć największy, użyj $ostatni
zamiast tego, ale dla najmniejszych lub największych w rzędzie prawdopodobnie ma sens $sortuj
najpierw, w przeciwnym razie użyj $ min
i $max
jeśli cały rząd nie jest ważny.
Zobacz MongoDB aggregate()
dokumentacja, aby uzyskać więcej informacji na temat użytkowania, a także dokumentacja sterownika JavaDocs i SpringData Mongo, aby lepiej wykorzystać metodę agregującą i możliwych pomocników.