sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongodb välj alla fält gruppera efter ett fält och sortera efter ett annat fält

Vad du vill är något som kan uppnås med aggregeringsramverket. Den grundläggande formen av ( som är användbar för andra ) är:

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

])

Så att "grupperar" på de distinkta värdena för "messageId" medan du använder $first gränsvärden för vart och ett av de andra fälten. Alternativt om du vill ha den största, använd $last istället, men för antingen den minsta eller den största efter rad är det förmodligen vettigt att $sort först, annars använd bara $ min och $max om hela raden inte är viktig.

Se MongoDB aggregate() dokumentation för mer information om användning, såväl som drivrutinen JavaDocs och SpringData Mongo-anslutningsdokumentation för mer användning av den aggregerade metoden och möjliga hjälpare.



  1. Låsa ett dokument i MongoDB

  2. Failover för MySQL-replikering (och andra) - bör det automatiseras?

  3. Mongoose $lookup där localField är en sträng av ett ObjectId i foreignField

  4. MongoDB:Uppdatera ett fält för ett objekt i array med att matcha ett annat fält för det objektet