我在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"]}} }
]);