假设下面是我的元素结构。我如何SHELL查询mongodb并获得每次旅行在数据库中每次旅行所需的平均差异(平均长度)?我猜减去日期?但那么如何减去然后平均?
"_id": {
"$oid": "5445ab058767000062"
},
"comment": null,
"scheduled_request": false,
"status": "blah",
"timestamp_started": {
"$date": "2014-10-21T00:38:28.990Z"
},
"timestamp_transaction_complete": {
"$date": "2014-10-21T00:49:12.990Z"
},
"user_id": "5445a9000057"
UDPATE ======== 这是我的查询
db.ambulance_requests.aggregate([
{ "$group": {
"_id": null,
"avg_time": {
"$avg": {
"$subtract": [
"$timestamp_transaction_complete",
"$timestamp_started"
]
}
}
}}
])
和我的结果(来自Mac终端外壳):
{ "_id" : null, "avg_time" : 0 }
答案 0 :(得分:1)
您$subtract
和$avg
将其应用于$group
管道阶段。对于“所有内容”,请使用null
作为分组键:
db.trips.aggregate([
{ "$group": {
"_id": null,
"avg_time": {
"$avg": {
"$subtract": [
{ "$ifNull": [ "$timestamp_completed", 0 ] },
{ "$ifNull": [ "$timestamp_started", 0 ] }
]
}
}
}}
])
当您从另一个BSON Date对象$subtract
时,差异将作为它们之间的毫秒间隔返回。这也是一种通常用于提取毫秒值以用于其他目的的技术。
您提供的单个文档:
{
"comment" : null,
"scheduled_request" : false,
"status" : "blah",
"timestamp_started" : ISODate("2014-10-21T00:38:28.990Z"),
"timestamp_completed" : ISODate("2014-10-21T00:49:12.990Z"),
"user_id" : "5445a9000057"
}
问题中单个文档的结果:
/* 1 */
{
"_id" : null,
"avg_time" : 644000.0
}