我在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)
}
如何在数据库中获取Max(时间)减去Min(时间)的名字。相当于这个SQL查询 -
SELECT name, Max(time)-Min(time) from tablename group by name
答案 0 :(得分:4)
您可以像这样使用aggregation framework 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()”和“MAX()”相同,因为它们充当了将“分组”作为“累加器”的功能。
$project
是MongoDB术语中一般语法的扩展。这允许您“操纵”现有字段值(在这种情况下,从$group
计算到文档中的新值。
所以在这里,两个值的$subtract
都会应用“计算”来确定结果。
虽然并不总是给出具体示例,但我强烈建议您查看核心文档的SQL to MongoDB mapping Chart部分。除了查看并完整地学习aggregation operators之外。
答案 1 :(得分:4)
请尝试以下方法:
db.collection.aggregate([
{ $group:{_id:"$name",maxt: {$max:"$time"}, mint : {$min:"$time"}} },
{ $project: {"_id" : 0 ,"name": "$_id",
"time" : {$subtract: ["$mint","$maxt"]}} }
]);