MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB - Abrufen von Dokumenten mit maximalem Attribut pro Gruppe in einer Sammlung

Die MongoDB-Aggregation bietet den $max Operator, aber in Ihrem Fall möchten Sie den "ganzen" Datensatz so, wie er ist. Das Richtige hier ist also $sort und verwenden Sie dann $first Operator innerhalb einer $group Aussage:

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

Das „Sortieren“ sorgt also für die richtige Reihenfolge, und das „Gruppieren“ wählt das erste Vorkommen innerhalb des „Gruppierungs“-Schlüssels aus, in dem diese Felder vorhanden sind.

Meistens $first hier, weil die $sort erfolgt in umgekehrter Reihenfolge. Sie können auch $last verwenden wenn auch in aufsteigender Reihenfolge.