sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoDB:obtenga documentos con el atributo máximo por grupo en una colección

La agregación de MongoDB ofrece el $max operador, pero en su caso desea el registro "completo" tal como está. Entonces, lo apropiado para hacer aquí es $sort y luego use el $first operador dentro de un $group declaración:

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

Entonces, la "clasificación" obtiene el orden correcto, y la "agrupación" elige la primera aparición dentro de la clave de "agrupación" donde existen esos campos.

Principalmente $first aquí porque el $sort se hace en orden inverso. También puede usar $last cuando en orden ascendente también.