【发布时间】:2019-04-15 08:57:21
【问题描述】:
考虑我收集的 user_events 如下:
[
{
"_id" : ObjectId("5be99dd1da8d4a596423a2d2"),
"user_id" : 203302,
"action" : "subscribe",
"created_at" : ISODate("2018-11-12T15:35:45.000Z"),
},
{
"_id" : ObjectId("5be99dd1da8d4a596423a2d2"),
"user_id" : 203302,
"action" : "unsubscribe",
"created_at" : ISODate("2018-10-12T15:35:45.000Z"),
},
...
]
我需要找到订阅我们服务至少 n 天的用户。 每个用户可以订阅和取消订阅无限次。 比如用户A可以订阅100次,退订100次。
如您所见,我的文档有一个名为 action 的字段。 所以换句话说,我需要为一个至少有 n 天日期间隔的用户找到记录。
所以我的结果会是这样的:
[
{
"user_id": 2,
"max_subscription_days": 2
},
{
"user_id(user A)": 5,
"max_subscription_days": 3
},
{
"user_id": 11,
"max_subscription_days": 3
}
]
但我需要至少 n 天参与服务的用户。 考虑用户 A 订阅我的服务并在 3 天后退订。
下次用户 A 再次订阅我的服务并在 5 天后退订。 所以这个用户的最大订阅天数是 5 。
我的堆栈: mongodb:4.0.0
php:7.2
【问题讨论】:
-
@ivanivan 请再次阅读问题。我不想要两个特定时间之间的记录。我需要服务至少 x(例如 2)天的用户
-
您的预期输出无法从您的样本集合中获得。并且可以用哪个字段
max_subscription_days生成? -
sudo 代码:每个用户的 max_subscription_days = max(number_of_days(unsub_date - sub_date))
-
@mhndev - 日期比较示例。获取今天,从中减去最小年龄,找到比当天更早的帐户。
标签: php mongodb mongodb-query