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

Mongodb selecciona todos los campos agrupados por un campo y ordena por otro campo

Lo que desea es algo que se pueda lograr con el marco de agregación. La forma básica de (que es útil para otros) es:

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 } }

])

De modo que los "grupos" en los distintos valores de "messageId" mientras se toma el $first valores límite para cada uno de los otros campos. Alternativamente, si desea el más grande, use $last en cambio, pero para el más pequeño o el más grande por fila probablemente tenga sentido $sort primero, de lo contrario solo use $min y $max si toda la fila no es importante.

Consulte MongoDB aggregate() documentación para obtener más información sobre el uso, así como el controlador JavaDocs y la documentación del conector SpringData Mongo para obtener más información sobre el uso del método agregado y posibles ayudantes.