Akh*_*ala 1 mongoose node.js aggregation-framework
我还需要每天获取特定日期范围内的个人用户数量。假设一个月内(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)
}
}
}
])
}
Run Code Online (Sandbox Code Playgroud)
为了获得想要的结果,这里应该做什么?
预期结果:
对于该特定日期范围,每天的计数。
{
date1 - 20,
date2 - 22,
date3 - 24,
...
date30 - 12
}
Run Code Online (Sandbox Code Playgroud)
预期输出应如上所示。之后应该进行什么查询$match。如果可能,请获取样本数据集并提供输出。
小智 5
例如,使用$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}
}
}
])
Run Code Online (Sandbox Code Playgroud)
基于此,您将得到如下输出:
{
"_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
}
...
Run Code Online (Sandbox Code Playgroud)
您可以使用上面的查询结果来获取所需的输出。
更准确地说,您可以从组查询中删除月份和年份参数以获得如下输出:
/* 1 */
{
"_id" : {
"day" : 25
},
"count" : 7.0
}
/* 2 */
{
"_id" : {
"day" : 18
},
"count" : 4.0
}
/* 3 */
{
"_id" : {
"day" : 17
},
"count" : 4.0
}
...
Run Code Online (Sandbox Code Playgroud)
作为参考,您可以查看 mongoDB 文档,也可以参考此。
希望上面的示例可以帮助您获得所需的输出。
| 归档时间: |
|
| 查看次数: |
1504 次 |
| 最近记录: |