MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

MongoDB:ottieni documenti con attributo massimo per gruppo in una raccolta

L'aggregazione MongoDB offre il $max operatore, ma nel tuo caso vuoi il record "intero" così com'è. Quindi la cosa appropriata da fare qui è $sort e poi usa il $first operatore all'interno di un $group dichiarazione:

db.collection.aggregate([
    { "$sort": { "session": 1, "age": -1 } },
    { "$group": {
        "_id": "$session",
        "age": { "$first": "$age" },
        "firstName": { "$first" "$firstName" },
        "lastName": { "$first": "$lastName" }
    }}
])

Quindi "l'ordinamento" ottiene l'ordine corretto e il "raggruppamento" seleziona la prima occorrenza all'interno della chiave di "raggruppamento" in cui esistono quei campi.

Principalmente $first qui perché $sort si fa in ordine inverso. Puoi anche utilizzare $last anche se in ordine crescente.