首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从mongodb文档获取客户活动天数

从mongodb文档获取客户活动天数
EN

Stack Overflow用户
提问于 2022-10-26 13:26:36
回答 1查看 48关注 0票数 0

我有一个用于客户流激活的mongodb文档。

代码语言:javascript
复制
[
  {
    "_id": 1,
    "email": "customer1@email.com",
    "packageid": "movies",
    "command": "activated",
    "tid": "123",
    "createdAt": ISODate("2021-06-08")
  },
  {
    "_id": 2,
    "email": "customer2@email.com",
    "packageid": "movies",
    "command": "activated",
    "tid": "124",
    "createdAt": ISODate("2021-06-20")
  },
  {
    "_id": 3,
    "email": "customer1@email.com",
    "packageid": "movies",
    "command": "deactivated",
    "tid": "1234",
    "createdAt": ISODate("2021-06-10")
  },
  {
    "_id": 4,
    "email": "customer2@email.com",
    "packageid": "movies",
    "command": "deactivated",
    "tid": "1244",
    "createdAt": ISODate("2021-06-22")
  },
  {
    "_id": 5,
    "email": "customer1@email.com",
    "packageid": "movies",
    "command": "activated",
    "tid": "123",
    "createdAt": ISODate("2021-06-11")
  },
  {
    "_id": 6,
    "email": "customer2@email.com",
    "packageid": "movies",
    "command": "activated",
    "tid": "1244",
    "createdAt": ISODate("2021-06-23")
  },
  {
    "_id": 7,
    "email": "customer1@email.com",
    "packageid": "movies",
    "command": "deactivated",
    "tid": "1237",
    "createdAt": ISODate("2021-06-15")
  },
  {
    "_id": 8,
    "email": "customer2@email.com",
    "packageid": "movies",
    "command": "deactivated",
    "tid": "1244",
    "createdAt": ISODate("2021-06-25")
  },
  
]

现在,我想通过电子邮件分组,并使每个客户激活的日子为特定的时间框架。比如说一个月吧。我已经试了几个小时了

代码语言:javascript
复制
{
"email":"customer1@email.com"
"packageid":"movies",
"days": 3
},
{
"email":"customer1@email.com"
"packageid":"movies",
"days": 5
},
{
"email":"customer2@email.com"
"packageid":"movies",
"days": 3
},
{
"email":"customer2@email.com"
"packageid":"movies",
"days": 3
}

编辑:任何用户都可以在他们想要的任何时候激活然后停用服务,有时用户会在同一个月内多次激活和停用。我想知道客户被激活了多少天。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-26 18:23:12

我们可以用$setWindowFields计算$dateDiff$group之和。

代码语言:javascript
复制
db.collection.aggregate([
  {
    "$setWindowFields": {
      "partitionBy": {
        email: "$email",
        packageid: "$packageid"
      },
      "sortBy": {
        "createdAt": 1
      },
      "output": {
        "next": {
          $shift: {
            output: "$createdAt",
            by: 1
          }
        }
      }
    }
  },
  {
    $match: {
      "command": "activated"
    }
  },
  {
    $project: {
      email: "$email",
      packageid: "$packageid",
      "days": {
        "$dateDiff": {
          startDate: "$createdAt",
          endDate: {
            $ifNull: [
              "$next",
              "$$NOW"
            ]
          },
          unit: "day"
        }
      }
    }
  }
])

这是供您参考的蒙戈游乐场

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74208615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档