我正在研究一个问题,在我的数据库中,每天应该有多个条目。每个条目包含一个时间戳。问题是我应该找到每个月有多少天的数据已输入。例如:如果用户在五月每两天发送一条消息。我的回答是:"用户在5月份使用了15天的留言功能"。现在如果用户在五月每两天发送5条消息。答案仍然是15。我只计算用户使用该应用程序的天数。
使用这个查询:
model.find({
date: {
$gte: new Date(startOfMonth),
$lt: new Date(endOfMonth)
}
})
我能够找到特定月份的所有数据条目。数据可能看起来像这样:
Date: dd/mm/yy Message:
1/5/2022 "Hello"
1/5/2022 "World"
1/5/2022 "!"
5/5/2022 "Hello World!"
8/5/2022 "Hello World!"
期望的答案是5月的3天。
我如何使用mongodb实现这一点?想到的最简单的答案是使用额外的查询来按唯一的日期分组,但我不知道如何使用mongo,如果我需要访问日期。
这可能解决您的问题。它将返回不同的消息
Model.aggregate(
[
{ "$match": {
"date": {
"$gte": new Date(startOfMonth), "$lt": new Date(endOfMonth)
}
}},
{ "$group": {
"_id": {
"year": { "$year": "$date" },
"month": { "$month": "$date" },
"day": { "$dayOfMonth": "$date" }
}
"count": { "$sum": 1 }
}}
],
function(err,result) {
// do something with result
}
);
可以使用distinctdb.collection.distinct({date:{$gte:new Date(startOfMonth),$lt:new Date(endOfMonth)}}).length
如果您直接存储它的日期。
注意:如果您存储完整的时间戳而不是日期,则可能无法工作。