Node.js 按天聚合生成重复的天结果
我的mongodb聚合查询应该返回特定日期范围内的每日、每周、每月和每年的数据 示例:假设日期介于2月1日到3月1日之间 每日数据应为:1、2、3。。 每周周期为:2月1日、2月8日、2月15日、2月22日。。 月周期为2月1日、3月1日 请看下面的示例: 假设我的API接受:startDate、endDate、interval作为body参数 req.body将是这样的:Node.js 按天聚合生成重复的天结果,node.js,mongodb,aggregation-framework,Node.js,Mongodb,Aggregation Framework,我的mongodb聚合查询应该返回特定日期范围内的每日、每周、每月和每年的数据 示例:假设日期介于2月1日到3月1日之间 每日数据应为:1、2、3。。 每周周期为:2月1日、2月8日、2月15日、2月22日。。 月周期为2月1日、3月1日 请看下面的示例: 假设我的API接受:startDate、endDate、interval作为body参数 req.body将是这样的: { startDate: "", endDate: "", platform: "", interval: "daily"
{
startDate: "",
endDate: "",
platform: "",
interval: "daily" // could be "weekly", "monthly", "yearly"
}
这些参数将被传递到我的模型中,我在模型中有一些聚合代码,下面将提到这些代码:
MessagesSchema.statics.totalMessages = ( startDate, endDate, platform, interval ) => {
return Messages.aggregate([{
$match: {
platform: platform,
timestamp: {
$gte: new Date(startDate),
$lte: new Date(endDate)
}
}
},
{
$project: {
timestamp: {
$dateToString: {
format: '%Y-%m-%d',
date: '$timestamp'
}
}
}
},
{
$group: {
_id: {
timestamp: '$timestamp'
},
count: {
$sum: 1
}
}
},
{
$sort: {
'_id.timestamp': 1
}
}
]).exec();
假设2019年2月1日至2019年3月1日的每周数据
预期结果:
[
{
"_id": {
"timestamp": "2019-02-01"
},
"count": 2
},
{
"_id": {
"timestamp": "2019-02-08"
},
"count": 2
},
{
"_id": {
"timestamp": "2019-02-15"
},
"count": 2
}
]
实际结果:
[
{
"_id": {
"timestamp": "2019-02-01"
},
"count": 2
},
{
"_id": {
"timestamp": "2019-03-02"
},
"count": 2
},
{
"_id": {
"timestamp": "2019-03-02"
},
"count": 2
}
]
您正在声明
$group
的\u id
(主键)两次生成相同的值。请出示复制您的索赔要求的文件。但也要检查你的结果,因为这实际上不可能发生。或者至少不是因为问题中指定的代码。顺便说一句,编辑你的标题以反映你的实际要求。老兄,你完全把我的问题搞错了!我如何改变这个问题???如果可以,请撤消更改。我想你可以帮我解决这个问题。让我给你解释一下。但首先,请撤消更改。因为你完全误解了我