MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongodb wählt alle Felder aus, gruppiert nach einem Feld und sortiert nach einem anderen Feld

Was Sie wollen, ist etwas, das mit dem Aggregationsframework erreicht werden kann. Die grundlegende Form von ( die für andere nützlich ist ) ist:

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

])

Damit "gruppiert" man die unterschiedlichen Werte von "messageId", während man den $first Grenzwerte für jedes der anderen Felder. Wenn Sie den größten Wert haben möchten, verwenden Sie alternativ $last stattdessen, aber für die kleinste oder größte Zeile macht es wahrscheinlich Sinn, $sort Verwenden Sie zuerst $min und $max wenn die ganze Zeile nicht wichtig ist.

Siehe MongoDB aggregate() Dokumentation für weitere Informationen zur Verwendung sowie die Treiber-JavaDocs- und SpringData-Mongo-Connector-Dokumentation für weitere Informationen zur Verwendung der Aggregatmethode und möglicher Hilfsprogramme.