MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Изберете Max() с група по в mongodb

Създадох колекция Mongo, както следва.

{ "_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 }

След това с помощта на следния код го групирам по тяхното име и max(стойност)

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

Резултатът се показва като

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

С рамката за агрегиране е много по-лесно. Можете да получите същия резултат със следния код, като използвате рамката за агрегиране.

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


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB GridFs с C#, как да съхранявате файлове като изображения?

  2. Основни съображения за вземане на резервно копие на MongoDB

  3. Редовен израз за MongoDB ObjectID

  4. Твърде много отворени файлове, като същевременно осигурите индекс mongo

  5. Как мога да изброя всички колекции в обвивката на MongoDB?