猫鼬如何计算一个月中的唯一天数?
Mongoose how to count unique days in a month?
我正在处理一个问题,我的数据库中应该每天都有多个条目。
每个条目都包含一个时间戳。问题是我应该找出每个月有多少天输入了数据。
例如:如果用户在 5 月每 2 天发送一次消息。我的回答是:“用户在 5 月份使用了 15 天的消息功能”。
现在,如果用户在 5 月每 2 天发送 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 来做到这一点,前提是我需要访问日期。
你可以使用distinct
db.collection.distinct({date:{$gte:new Date(startOfMonth),$lt:new Date(endOfMonth)}}).length
如果您直接存储它的日期。
注意:如果您要存储完整的时间戳而不是日期,这可能不起作用。
这可能会解决您的问题。它将 return 不同的消息。
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
}
);
我正在处理一个问题,我的数据库中应该每天都有多个条目。 每个条目都包含一个时间戳。问题是我应该找出每个月有多少天输入了数据。 例如:如果用户在 5 月每 2 天发送一次消息。我的回答是:“用户在 5 月份使用了 15 天的消息功能”。 现在,如果用户在 5 月每 2 天发送 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 来做到这一点,前提是我需要访问日期。
你可以使用distinct
db.collection.distinct({date:{$gte:new Date(startOfMonth),$lt:new Date(endOfMonth)}}).length
如果您直接存储它的日期。
注意:如果您要存储完整的时间戳而不是日期,这可能不起作用。
这可能会解决您的问题。它将 return 不同的消息。
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
}
);