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

Vælg Max() med gruppe efter i mongodb

Jeg har oprettet Mongo Collection som følger.

{ "_id" : ObjectId("4fb36bfd3d1c88bfa15103b1"), "name" : "bob", "value" : 5 }
{ "_id" : ObjectId("4fb36c033d1c88bfa15103b2"), "name" : "bob", "value" : 3 }
{ "_id" : ObjectId("4fb36c063d1c88bfa15103b3"), "name" : "bob", "value" : 7 }
{ "_id" : ObjectId("4fb36c0c3d1c88bfa15103b4"), "name" : "john", "value" : 2 }
{ "_id" : ObjectId("4fb36c103d1c88bfa15103b5"), "name" : "john", "value" : 4 }
{ "_id" : ObjectId("4fb36c143d1c88bfa15103b6"), "name" : "john", "value" : 8 }
{ "_id" : ObjectId("4fb36c163d1c88bfa15103b7"), "name" : "john", "value" : 6 }
 

Så ved at bruge følgende kode grupperer jeg den efter deres navn og max(værdi)

db.table1.group( {key: {name:true}, reduce: function(obj,prev) { if (prev.maxValue < obj.value) { prev.maxValue = obj.value; } }, initial: { maxValue: 0 }} );

Resultatet vises som

[
    {
        "name" : "bob",
        "maxValue" : 7
    },
    {
        "name" : "john",
        "maxValue" : 8
    }
]
 

Det er meget enklere med aggregeringsrammen. Du kan få det samme resultat med følgende kode ved at bruge aggregeringsramme.

db.table1.aggregate([
    {
       $group:{_id:"$name", "maxValue": {$max:"$value"}}
    }
]);
 


  1. MongoDB Object.bsonSize()

  2. MongoDB $ln

  3. Får mongoose.js-forespørgsler til at køre synkront

  4. $spring og $limit i aggregeringsramme