MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB - obtenir des documents avec un attribut maximum par groupe dans une collection

L'agrégation MongoDB offre le $max opérateur, mais dans votre cas, vous voulez que l'enregistrement "entier" soit tel qu'il est. Donc, la chose appropriée à faire ici est $sort puis utilisez le $first opérateur au sein d'un $group déclaration :

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

Ainsi, le "tri" obtient le bon ordre et le "groupement" sélectionne la première occurrence dans la clé de "groupement" où ces champs existent.

Principalement $first ici parce que le $sort se fait dans l'ordre inverse. Vous pouvez également utiliser $last également dans un ordre croissant.