Javascript 按日期间隔聚合数据
这就是我如何进行聚合查询,以获取开始时间和结束时间之间的平均时间,格式均为ISODate2020-02-24T13:08:00.123Z 但我需要将结果数据分为两组,因为我需要获得开始时间为2019年4月-2020年9月的所有数据集的平均数据,以及开始时间为2019年10月-2020年4月的第二组所有数据。 我不知道如何根据这两个时间间隔对ISODate值进行分组Javascript 按日期间隔聚合数据,javascript,mongodb,Javascript,Mongodb,这就是我如何进行聚合查询,以获取开始时间和结束时间之间的平均时间,格式均为ISODate2020-02-24T13:08:00.123Z 但我需要将结果数据分为两组,因为我需要获得开始时间为2019年4月-2020年9月的所有数据集的平均数据,以及开始时间为2019年10月-2020年4月的第二组所有数据。 我不知道如何根据这两个时间间隔对ISODate值进行分组 const data = await Data.aggregate([ { $match: { ty
const data = await Data.aggregate([
{
$match: {
type: { $exists: true },
statsIgnore: { $exists: false }
}
},
{
$group: {
_id: '$type',
Datasets: { $sum: 1 },
Average: {
$avg: {
$divide: [
{ $subtract: ['$timeEnd', '$timeStart'] },
60000
]
}
}
}
}
]).toArray()
我的数据结构
在这个简单的数据示例中,只有一种类型具有夏季的单个数据集和冬季间隔的单个数据集
因此,type1组的结果应该是冬季平均10分钟,夏季平均20分钟。我采取的方法是检查timeStart是否在初始$match阶段所需的范围内。然后我添加了一个$addFields阶段,根据开始日期检查季节是否为夏季。然后我按我的新夏季场地分组
检查这是否符合您的要求:
db.data.aggregate([
{
$match: {
type: {
$exists: true
},
statsIgnore: {
$exists: false
}
}
},
{
$group: {
_id: {
type: "$type",
season: {
$arrayElemAt: [
[
"None",
"Winter",
"Winter",
"Spring",
"Spring",
"Spring",
"Summer",
"Summer",
"Summer",
"Autumn",
"Autumn",
"Autumn",
"Winter"
],
{
$month: "$timeStart"
}
]
}
},
Datasets: {
$sum: 1
},
Average: {
$avg: {
$divide: [
{
$subtract: [
"$timeEnd",
"$timeStart"
]
},
60000
]
}
}
}
}
])
对我来说,不清楚你想要什么。预期产量是多少?
[
{$match: {
type: {
$exists: true
},
statsIgnore: {
$exists: false
},
timeStart: {
$gte: ISODate("2019-04-01T00:00:00Z"),
$lt: ISODate("2020-04-01T00:00:00Z")
}
}},
{$addFields: {
summer: { $lt: ["$timeStart", ISODate("2019-09-01T00:00:00Z")]}
}},
{$group: {
_id: "$summer",
Average: {
$avg: {
$divide: [
{ $subtract: ['$timeEnd', '$timeStart'] },
60000
]
}
}
}}]
db.data.aggregate([
{
$match: {
type: {
$exists: true
},
statsIgnore: {
$exists: false
}
}
},
{
$group: {
_id: {
type: "$type",
season: {
$arrayElemAt: [
[
"None",
"Winter",
"Winter",
"Spring",
"Spring",
"Spring",
"Summer",
"Summer",
"Summer",
"Autumn",
"Autumn",
"Autumn",
"Winter"
],
{
$month: "$timeStart"
}
]
}
},
Datasets: {
$sum: 1
},
Average: {
$avg: {
$divide: [
{
$subtract: [
"$timeEnd",
"$timeStart"
]
},
60000
]
}
}
}
}
])