gpt4 book ai didi

javascript - MongoDB 聚合框架 - 如何按日期范围、按天分组和每天返回平均值进行匹配?

转载 作者:IT老高 更新时间:2023-10-28 13:15:30 24 4
gpt4 key购买 nike

我刚刚了解 MongoDB 的聚合框架,我想知道是否有人可以帮助我改进此查询以执行以下操作:

  • 查找/匹配日期在提交范围之间的记录
  • 按天对结果进行分组
  • 每天的平均返回率

这是我的模型,有一些有用的属性可以让编写这个查询变得更容易,比如 day 属性...

// Model
var PriceHourlySchema = new Schema({
created: {
type: Date,
default: Date.now
},
day: {
type: String,
required: true,
trim: true
},
hour: {
type: String,
required: true,
trim: true
},
price: {
type: Number,
required: true
},
date: {
type: Date,
required: true
}
},
{
autoIndex: true
});

到目前为止,这是我的查询,它只返回范围内所有日期的总平均值,并且不按天分组并返回每一天的平均值,因此您可以按 day 进行 $group >...

var start       = moment.utc(req.query.start).startOf('year').toDate();
var end = moment.utc(req.query.start).add('years',1).startOf('year').add('hours',1).toDate();

PriceHourly.aggregate([
{ $match: { date: { $gt: start, $lt: end } } },
{ $group: { _id: null, price: { $avg: '$price' } } }
], function(err, results){
console.log(results);
}); // PriceHourly();

最佳答案

问题似乎出在您用于 $group 的 _id 上。如果您想按天对结果进行分组,您应该按 $day 而不是 null 进行分组。试试这个:

PriceHourly.aggregate([
{ $match: { date: { $gt: start, $lt: end } } },
{ $group: { _id: "$day", price: { $avg: '$price' } } }
], function(err, results){
console.log(results);
});

也就是说,您不需要将日期和小时作为单独的元素存储在文档中。是冗余数据。您可以使用 Date Aggregation 从聚合查询中的 date 字段中提取 dayhour运营商。

关于javascript - MongoDB 聚合框架 - 如何按日期范围、按天分组和每天返回平均值进行匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22771599/

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