gpt4 book ai didi

javascript - 按日期间隔汇总数据

转载 作者:行者123 更新时间:2023-12-02 21:40:35 25 4
gpt4 key购买 nike

这就是我进行聚合查询以获取开始时间和结束时间之间的平均时间的方式(均采用格式 ISODate("2020-02-24T13:08:00.123Z") )。

但是我需要将结果数据分为两组,因为我需要获取开始时间为 04/2019 - 09/2020 的所有数据集的平均数据,第二组为开始时间为 10/2019 - 04/的所有数据2020.我不明白如何按 ISODate 值的这两个间隔进行分组

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()

我的数据结构

[
{
_id: ObjectId("5d9242cf863feb0b8d70d12e"),
timeStart: ISODate("2020-02-24T13:08:00.123Z"),
timeEnd: ISODate("2020-02-24T13:18:00.123Z"),
type: 'type1'
},
{
_id: ObjectId("5d9242cf863feb0b8d70d12f"),
timeStart: ISODate("2019-08-29T17:05:00.123Z"),
timeEnd: ISODate("2019-08-29T17:25:00.123Z"),
type: 'type1'
}
]

在这个简单的数据示例中,只有一种类型,其中包含夏季的单个数据集和冬季间隔的单个数据集。

因此结果应该是冬季平均 10 分钟,夏季平均 20 分钟(对于类型 1 组)。

最佳答案

我采取的方法是检查 timeStart 是否在您在初始 $match 阶段寻找的范围内。然后我添加了一个 $addFields 阶段,用于根据开始日期检查季节是否为夏季。然后我按新的 summer 字段进行分组。

[
{$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
]
}
}
}}]

关于javascript - 按日期间隔汇总数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60375965/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com