Вопрос по mongodb – Выберите Max () с помощью «group by» в mongodb

19

Пожалуйста, помогите мне преобразовать это выбранное предложение в mongodb:

Select Name, Max(Value) From table1 Group By Name

Я прочитал этот документ:http://www.mongodb.org/display/DOCS/Aggregation#Aggregation-Group

но все еще не знаю, как применить метод Max () вместо SUM () в качестве этого документа.

Спасибо.

не пробовал,reduce: function(obj,prev) { if (prev.c < obj.c) { prev.c = obj.c; } }, Zheng Kai

Ваш Ответ

4   ответа
1
var myresult = db.table1.aggregate( [                              
                            { $group: 
                                  _id:"$Name",                                                                     
                                   value: { $max: "$Value" } 
                                 } 
                            } 
                            ]);
print(myresult)
18

db.table1.aggregate({$group:{'_id':'$name', 'max':{$max:'$value'}}}, 
{$sort:{'max':1}}).result
1

db.employee.insert({name:"Tejas",Value:2})
db.employee.insert({name:"Tejas",Value:3})
db.employee.insert({name:"Varma",Value:1})
db.employee.insert({name:"Varma",Value:6})

var map=function(){
var key={name:this.name};
var value={value:this.Value};
emit(key,value);
};

var reduce=function(key,values){
var max=-1;
values.forEach(function(value){
            if(max==-1){
        max=value['value'];
    }
    if(max<value['value']){
        max=value['value'];
    }
});
return {max:max};
};

db.employee.mapReduce (карта, уменьшить, {из: {инлайн: 1}});

Спасибо огромное spidermanit
22

{ "_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"}}}
);
Простите за поздний ответ. Да, также возможно сравнить даты с этим методом. Вам нужно только заменить obj.date на obj.value
Привет, Парвин. этот метод можно проверить максимальную дату, я имею в виду самую последнюю дату? spidermanit

Похожие вопросы