在mongodb中使用group by子句获取值的范围



我在mongodb中有一个这样的集合。

{
  "_id": "1235677",
  "name" : "xyz",
  "time" : ISODate(2015-07-20T09:00:00Z)
},
{
  "_id": "1235677",
  "name" : "xyz",
  "time" : ISODate(2015-07-20T11:00:00Z)
},
{
  "_id": "1235677",
  "name" : "abs",
  "time" : ISODate(2015-07-20T11:00:00Z)
}

我如何得到最大(时间)减去最小(时间)的每一个名称在数据库中。相当于这个sql查询-

SELECT name, Max(time)-Min(time) from tablename group by name

您使用MongoDB的聚合框架如下:

db.collection.aggregate([
    { "$group": {
        "_id": "$name",
        "minTime": { "$min": "$time" },
        "maxTime": { "$max": "$time" }
    }},
    { "$project": {
        "duration": { "$subtract": [ "$minTime", "$maxTime" ] }
    }}
])

您可以将聚合框架用于所有不涉及基本(SQL等效)语句类型的内容(最佳):

SELECT something FROM table

这里的操作如下:

  • $group :与"GROUP BY"相同,其中指定要在_id主键值内聚合的"键"。 $min $max 运算符分别与"MIN()"one_answers"MAX()"相同,在作为"累加器"的"分组"中充当函数。

  • $project 是MongoDB中通用语法的扩展。这允许您"操纵"现有字段值(在本例中是从$group计算的)到文档中的新值。

    所以这里的"计算"是由 $subtract 从两个值中应用来确定结果。

虽然具体的例子并不总是给出,我强烈建议看一下核心文档的SQL到MongoDB映射图部分。

请尝试如下:

 db.collection.aggregate([
  { $group:{_id:"$name",maxt: {$max:"$time"}, mint : {$min:"$time"}} },
  { $project: {"_id" : 0 ,"name": "$_id", 
    "time" : {$subtract: ["$mint","$maxt"]}} }
 ]);

相关内容

  • 没有找到相关文章

最新更新