MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Mongodb seleziona tutti i campi raggruppati per un campo e ordina per un altro campo

Quello che vuoi è qualcosa che può essere ottenuto con il framework di aggregazione. La forma base di ( che è utile agli altri ) è:

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

])

In modo che "gruppi" sui valori distinti di "messageId" mentre si prende il $first valori limite per ciascuno degli altri campi. In alternativa, se vuoi il più grande, usa $last invece, ma per riga più piccola o più grande probabilmente ha senso $sort prima, altrimenti usa $min e $max se l'intera riga non è importante.

Vedi MongoDB aggregate() documentazione per ulteriori informazioni sull'utilizzo, nonché la documentazione del driver JavaDocs e del connettore SpringData Mongo per un maggiore utilizzo del metodo aggregato e dei possibili aiutanti.