如何使用时间戳作为MongoDB和Node.js中的字段按天对记录进行分组

核心

我想按时段将记录分组。到目前为止,我已经尝试使用添加到聚合函数中的以下代码:

 {
    $group : {
         _id : {  day: { $dayOfMonth: "$timestamp" }},
         count: { $sum: 1 }
      }
 }

这是文档的样子:

{
"_id" : ObjectId("ec9cddd50e08a84cd3f4cccb"),
"orgid" : "5c48500d84430a3a4b828e85",
"timestamp" : ISODate("2019-03-28T14:00:00.000Z"),
"apiid" : {
    "zxczxczxczxczxc" : {
        "errortotal" : 6,
        "hits" : 6,
        "humanidentifier" : "Feedback",
        "identifier" : "663cfc345e42401c6443cfd635301f8f",
        "lasttime" : ISODate("2019-03-28T14:58:07.355Z"),
        "success" : 0,
        "totalrequesttime" : 0.0,
        "requesttime" : 0.0
    }
},
"apikeys" : {
    "00000000" : {
        "errortotal" : 3,
        "hits" : 3,
        "humanidentifier" : "",
        "identifier" : "00000000",
        "lasttime" : ISODate("2019-03-28T14:55:10.438Z"),
        "success" : 0,
        "totalrequesttime" : 0.0,
        "requesttime" : 0.0
    },
    "cae81afc" : {
        "errortotal" : 3,
        "hits" : 3,
        "humanidentifier" : "EE5RqcXMTqcWEx8nZv3vRATLspK2",
        "identifier" : "cbe81afc",
        "lasttime" : ISODate("2019-03-28T14:58:07.355Z"),
        "success" : 0,
        "totalrequesttime" : 0.0,
        "requesttime" : 0.0
    }
}

知道如何实现吗?

我得到的结果是:[{_id:{day:null},count:3}],这对我来说似乎是错误的,因为我有两个具有相同日期的文档和另一个具有不同时间戳的文档

更新:我也有这个内部聚合功能:

  // Project things as a key/value array, along with the original doc
                {
                    $project: {
                        array: {$objectToArray: '$apikeys'},
                        doc: '$$ROOT',
                    }
                },

                // Match the docs with a field value of 'x'
                {$match: {'array.v.humanidentifier': {$in: trialCustomerUsers}}},

如果我对这一部分进行评论,它将很好地进行分组,但是事情是,在我也不知道什么是关键的情况下,我也会做一些where语句,这就是为什么我必须添加这段代码

阿什

您已经使用来$project编辑doc字段中的所有根文档$$ROOT现在您的聚合应该如下

db.collection.aggregate([
  { "$project": {
    "array": { "$objectToArray": "$apikeys" },
    "doc": "$$ROOT"
  }},
  { "$match": { "array.v.humanidentifier": { "$in": trialCustomerUsers }}},
  { "$group" : {
    "_id" : { "day": { "$dayOfMonth": "$doc.timestamp" }},
    "count": { "$sum": 1 }
  }}
])

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Rust Diesel中使用时间戳和时间间隔进行算术运算

使用时间戳字段按天分组

使用时间戳和 Moment.js

如何在Postgres中使用时间戳字段对日期进行分组?

如何使用时间戳与熊猫一起按小时分组数据帧

一组列作为 Mysql 中的唯一键,但使用时间戳作为一天

在JDBC中,何时使用时间,日期和时间戳

使用时间戳节点js从mongodb获取今天的导入数据

如何使用时间戳作为参考合并 SQL Server 2014 中同一个表中的记录

使用时间戳列表记录和重放输入

使用时间戳计数器和 clock_gettime 进行缓存未命中

如何使用时间戳列获取过去X天的数据?

在ng-repeat中使用时间戳分组

Laravel5:如何在迁移中使用时间戳字段

使用时间戳字段创建表MySQL

如何使用时间戳对Pandas DataFrame进行升采样

Postgres:使用时间戳进行分页

如何使用时间戳在Firebase中过滤结果?安卓系统

如何使用时间戳在 Perl 中获取最近的文件

如何在目录中读取文件名并使用时间戳打印为输出

如何使用时间和日期输入进行过滤和分类

在生成用于获取 n:m 关联模型的 SQL 时,如何让 sequelize 不使用时间戳字段?

如何使用时间段对天进行分组以了解我是否在 SQL 中有一整周的时间?

如何在Python中构建朴素贝叶斯模型中使用时间戳数据

如何在库中获取SAS表的大小和上次使用时间

SparkR。SQL。使用时间戳在滚动时间窗口内计数满足条件的记录

Linux查找命令-显示超过7天的文件-不使用时间戳

使用时间戳将天添加到GNU日期命令

如何使用时间在datetimeIndex数组中建立索引