To, co chcete, je něco, čeho lze dosáhnout pomocí agregačního rámce. Základní forma ( která je užitečná pro ostatní ) je:
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 } }
])
Takže se "seskupí" na odlišných hodnotách "messageId" při použití $first
hraniční hodnoty pro každé z ostatních polí. Případně, pokud chcete největší, použijte $last
místo toho, ale pro nejmenší nebo největší podle řádku má pravděpodobně smysl $sort
nejprve, jinak stačí použít $ min
a $max
pokud není důležitý celý řádek.
Podívejte se na MongoDB aggregate()
dokumentaci pro více informací o použití a také dokumentaci ovladače JavaDocs a konektoru SpringData Mongo pro větší využití agregační metody a možných pomocníků.