当前位置: 首页 > 知识库问答 >
问题:

在mongodb中用“group by”选择Max()

司徒云
2023-03-14

请帮我把这个select语句转换成MongoDB:

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

我阅读了这个文档:http://www.mongodb.org/display/docs/aggregate#aggregate-group

但仍然不知道如何应用Max()方法而不是SUM()作为该文档。

谢谢.

共有3个答案

洪和平
2023-03-14
var myresult = db.table1.aggregate([{ 
    $group: {
        _id:"$Name",                                                                     
        value: { $max: "$Value" } 
    } 
}]);
print(myresult)
邢硕
2023-03-14

使用聚合框架:

db.table1.aggregate({$group:{'_id':'$name', 'max':{$max:'$value'}}}, 
{$sort:{'max':1}}).result
燕博文
2023-03-14

我创建了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(value)分组

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"}}
    }
]);
 类似资料:
  • 我正在尝试选择一些不在我的中的属性。这可能吗? 如何从中获取CatId和持久属性? 如果我将它们添加到组中,就像,那么我的结果就会混乱。 我可以使用获得其他属性,如,但这些属性不是计算值。 数据示例: 希望将结果按如下方式分组:

  • 问题内容: 可以在mongo db中像在SQL中那样选择集合的文档: 还是如果我有一个我必须一个一个地选择,然后重新组合结果? 问题答案: 简单 :) 摘自:http : //www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24in

  • 问题内容: 我正在尝试熊猫的分组依据功能,特别是 由于gb有50个组,因此结果非常混乱,我只想探索前5个组的结果。 我找到了如何使用或选择单个组的方法(如何通过key访问datagroup的pandasgroup ),但没有找到直接选择多个组的方法。我能做的最好的事情是: 有没有更直接的方法? 问题答案: 你可以做类似的事情 虽然,我会采取不同的方法。您可以使用该对象快速获取组: 现在,您可以像字

  • 我在这里找到了一个解决方案:如何使用ApacheCamel和MongoDB创建动态equals查询? 但这看起来需要做很多工作。难道Camel没有更简单的方法将值传递给MongoDB查询吗?我希望我们能传递Mongo使用的实际find({})语言。 以下是我的工作,一些日志显示了它在做什么:

  • 抱歉发了这么长的帖子! 我有一个Mongo收藏,包含以下文档: 我想查询这些文档,并返回每个名称的最大值条目,因此我想要的结果集(顺序无关紧要)是: 如果我想在C#中做完全相同的事情,我会使用: 使用聚合管道,我已经达到了: 这给了我以下结果集: 如您所见,我有一个文档数组,每个文档都包含一个“_id”字段(名称)和一个“highest”字段(实际文档)。 这将用C表示为: 我想知道的是,是否可以

  • 问题内容: 我是MSSQL用户,现在将数据库转换为MySQL。我在MySQL中编写以下查询: 我得到以下错误 如何用MySQL正确编写这样的查询? 问题答案: 使用CREATE TABLE SELECT语法。 http://dev.mysql.com/doc/refman/5.0/en/create-table- select.html