MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Mongodb seleciona todos os campos agrupados por um campo e classificando por outro campo


O que você quer é algo que pode ser alcançado com a estrutura de agregação. A forma básica de ( que é útil para outros ) é:
db.collection.aggregate([

    // Group by the grouping key, but keep the valid values
    { "$group": {
        "_id": "$chainId",
        "docId": { "$first": "$_id" },
        "messageId": { "$first": "$messageId" },
        "createOn": { "$first": "$createdOn" }
    }},

    // Then sort
    { "$sort": { "createOn": -1 } }

])

Para que "agrupe" nos valores distintos de "messageId" enquanto estiver usando o $first valores de limite para cada um dos outros campos. Como alternativa, se você quiser o maior, use $último em vez disso, mas para menor ou maior por linha, provavelmente faz sentido $sort primeiro, caso contrário, use $ min e $max se a linha inteira não for importante.

Veja o MongoDB aggregate() documentação para obter mais informações sobre o uso, bem como a documentação do conector JavaDocs e SpringData Mongo do driver para mais uso do método agregado e possíveis auxiliares.