MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Mongodb sélectionne tous les champs groupés par un champ et triés par un autre champ

Ce que vous voulez, c'est quelque chose qui peut être réalisé avec le cadre d'agrégation. La forme de base de ( qui est utile aux autres ) est :

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

])

Pour que les "groupes" sur les valeurs distinctes de "messageId" tout en prenant le $first valeurs limites pour chacun des autres champs. Alternativement, si vous voulez le plus grand, utilisez $last à la place, mais pour le plus petit ou le plus grand par ligne, il est probablement logique de $sort d'abord, sinon utilisez simplement $min et $max si toute la ligne n'est pas importante.

Voir MongoDB aggregate() documentation pour plus d'informations sur l'utilisation, ainsi que la documentation du pilote JavaDocs et du connecteur SpringData Mongo pour plus d'utilisation de la méthode d'agrégation et des aides possibles.