我还需要每天获取特定日期范围内的个人用户数量。假设一个月内(1 日 - 30 日)总共有 100 个用户,我需要获得如下计数
{
1st - 2 users
2nd - 10 users
}
MessagesSchema.statics.totalMessagesGraph = (id, startDate, endDate, platform) => {
return Messages.aggregate([
{
$match: {
id: id,
platform: platform,
timestamp: {
$gte: new Date(startDate),
$lte: new Date(endDate)
}
}
}
])
}
这里应该做什么才能得到想要的结果?
预期结果:
对于该特定日期范围,每天的计数。
{
date1 - 20,
date2 - 22,
date3 - 24,
...
date30 - 12
}
预期输出应如上所示。 $match
之后应该进行什么查询。如果可能,请获取示例数据集并提供输出。
最佳答案
使用$group获取按天计数 例如
db.collection.aggregate([
{
$match: {
//id: id,
//platform: platform,
//timestamp: {
//$gte: new Date(startDate),
//$lte: new Date(endDate)
//}
//}
// Your matching logic
},
/* Now grouping users based on _id or id parameter for each day
from the above match results.
$createdAt can be replaced by date property present in your database.
*/
{ $group : {
id : { day: { $dayOfMonth: "$createdAt" },
month: { $month: "$createdAt" },
year: { $year: "$createdAt" } },
count : {$sum : 1}
}
}
])
基于此,您将得到如下输出:
{
"_id" : {
"day" : 14,
"month" : 1,
"year" : 2017
},
"count" : 2.0
}
/* 2 */
{
"_id" : {
"day" : 31,
"month" : 1,
"year" : 2017
},
"count" : 8.0
}
/* 3 */
{
"_id" : {
"day" : 2,
"month" : 1,
"year" : 2017
},
"count" : 4.0
}
...
您可以使用上面的查询结果来获取所需的输出。
更准确地说,您可以从组查询中删除月份和年份参数以获得如下输出:
/* 1 */
{
"_id" : {
"day" : 25
},
"count" : 7.0
}
/* 2 */
{
"_id" : {
"day" : 18
},
"count" : 4.0
}
/* 3 */
{
"_id" : {
"day" : 17
},
"count" : 4.0
}
...
作为引用,您可以查看 mongoDB 文档,也可以引用此。
MongoDB Aggregation Queries for "Counts Per Day"
希望上面的示例可以帮助您获得所需的输出。
关于node.js - MongoDB 聚合函数,用于返回特定日期范围内的按日计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54516172/