sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB - hämta dokument med maxattribut per grupp i en samling

MongoDB-aggregation erbjuder $max operatör, men i ditt fall vill du ha "hela" posten som den är. Så det lämpliga att göra här är $sort och använd sedan $first operator inom en $group uttalande:

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

Så "sorteringen" får ordningen rätt, och "grupperingen" väljer den första förekomsten inom "gruppering"-nyckeln där dessa fält finns.

Mestadels $first här eftersom $sort görs i omvänd ordning. Du kan också använda $last även i stigande ordning.



  1. Hur man får DIFF på sorterat set

  2. Mongodb-fråga baserad på objekt vid specifik position i arrayen

  3. Hur man förhindrar återställningar i MongoDB

  4. Spara strängar igen som buffertar på vissa operativsystem, inte andra?