Javascript 按日期间隔聚合数据

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

这就是我如何进行聚合查询,以获取开始时间和结束时间之间的平均时间,格式均为ISODate2020-02-24T13:08:00.123Z

但我需要将结果数据分为两组,因为我需要获得开始时间为2019年4月-2020年9月的所有数据集的平均数据,以及开始时间为2019年10月-2020年4月的第二组所有数据。 我不知道如何根据这两个时间间隔对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()
我的数据结构

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


因此,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
          ]
        }
      }
    }
  }
])