【问题标题】:Aggregation: group date in nested documents (nested object)聚合:嵌套文档中的分组日期(嵌套对象)
【发布时间】:2020-04-20 13:21:35
【问题描述】:

我有一个包含用户信息的 mongo 数据库。如果添加了 new userdata,我会进行重复检查,如果出现重复条目​​,我不会创建新文档,而是使用嵌套节点(正在跟踪)添加时间戳来更新现有文档以及其他一些信息。

{
  "_id": "5e95dee277dcc55e9d18bf1a",
  "email": "test@test.com",
  "tracking": [
    {
      "domain": "mydomain",
      "subdomain": "",
      "ip": "59.214.120.68",
      "timestamp": "2020-03-21 20:06:12",
      "externalID": "82"
    },
    {
      "domain": "mydomain",
      "subdomain": "",
      "ip": "99.214.130.33",
      "timestamp": "2020-03-26 18:43:01",
      "externalID": "483"
    },
    {
      "domain": "mydomain",
      "subdomain": "",
      "ip": "19.214.131.22",
      "timestamp": "2020-03-26 18:48:42",
      "externalID": "485"
    }
  ]
}

现在我正在尝试汇总文档并按日期对它们进行分组/计数。是否有任何选项可以让我在每个文档的 tracking 下使用不同数量的节点来做到这一点?

【问题讨论】:

    标签: mongodb aggregation-framework


    【解决方案1】:

    你可以做这样的事情。

    {
        $unwind: {
            path: "$tracking",
            preserveNullAndEmptyArrays: true
        }
    }, {
        $group: {
            _id: "$tracking.timestamp",
            count: {
                $sum: 1
            }
        }
    }
    

    【讨论】:

    • 你是我的英雄!谢谢!
    【解决方案2】:

    如果您可以将日期时间存储为实际的日期时间类型而不是字符串表示形式,那就更好了。但是假设你现在不能,没有时间(我相信你正在寻找)按日期组件分组,你可以使用substr

    db.foo.aggregate([
    {$unwind: "$tracking"}
    ,{$group: {"_id": {$substr: [ "$tracking.timestamp", 0, 10] } , n: {$sum:1} }}
    ]);
    

    【讨论】:

      猜你喜欢
      • 2018-09-10
      • 2020-10-29
      • 2021-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-19
      • 1970-01-01
      相关资源
      最近更新 更多