Ce que vous voulez, c'est quelque chose qui peut être réalisé avec le cadre d'agrégation. La forme de base de ( qui est utile aux autres ) est :
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 } }
])
Pour que les "groupes" sur les valeurs distinctes de "messageId" tout en prenant le $first
valeurs limites pour chacun des autres champs. Alternativement, si vous voulez le plus grand, utilisez $last
à la place, mais pour le plus petit ou le plus grand par ligne, il est probablement logique de $sort
d'abord, sinon utilisez simplement $min
et $max
si toute la ligne n'est pas importante.
Voir MongoDB aggregate()
documentation pour plus d'informations sur l'utilisation, ainsi que la documentation du pilote JavaDocs et du connecteur SpringData Mongo pour plus d'utilisation de la méthode d'agrégation et des aides possibles.