mongodb - 按小时分组并计数 MongoDB

标签 mongodb nosql mongodb-query aggregation-framework

我正在进行一个处理自行车共享服务数据的项目。每次行程都有以下信息

> db.bikes.find({bike:9990}).pretty()
{
    "_id" : ObjectId("5bb59fd8e9fb374bf0cd5c1c"),
    "gender" : "M",
    "userAge" : 49,
    "bike" : 9990,
    "depStation" : 150,
    "depDate" : "01/08/2018",
    "depHour" : "0:00:13",
    "arrvStation" : 179,
    "arrvDate" : "01/08/2018",
    "arrvHour" : "0:23:38"
}

如何对一天中的每个小时进行分组并计算该特定小时内的出行次数? 我正在尝试这个查询

db.bikes.aggregate(
  { 
     $group:{_id:{$hour: "$depHour"}, trips:{$sum: 1}}
  }
)

但是它抛出了这个错误

    "ok" : 0,
    "errmsg" : "can't convert from BSON type string to Date",
    "code" : 16006,
    "codeName" : "Location16006"

最佳答案

depDatedepHour 字段都是分别表示日期和小时的字符串值,因此无需使用 date operators要将字段转换为日期对象,您所需要做的就是使用 $substrCP 提取小时部分。 ,然后直接将它们用作 $group _id 中的表达式:

db.bikes.aggregate([
    { '$group': {
        '_id': {
            'day': '$depDate',
            'hour': { '$substrCP': [ '$depHour', 0, 2 ] }
        }, 
        'trips': { '$sum': 1 }
    } }
])

关于mongodb - 按小时分组并计数 MongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52639932/

相关文章:

mongodb - 获取所有子文档都符合条件的 MongoDB 文档

MongoDb.展平内部数组

javascript - 将属性添加到数组中 MongoDB 的对象并在响应中发送

PHP 无法创建与 mongoDB 的连接

javascript - 如何更新 MongoDB 中已有的字段

hadoop - 究竟是什么?

nosql - NoSql (RavenDB) 的多对多设计

node.js - 如何在不覆盖当前数据的情况下更新 Mongoose 中的混合类型字段?

node.js - Mongoose 更新文档因 findByIdAndUpdate 失败

node.js - Mongoose 分页 : Overflow sort stage buffered data usage?