MongoDB Compass 中的聚合管道。
管道将从createdOn列中获取今天的dayOfWeek。 然后它将计算上个月每个工作日每个businessSubType每小时的预订数量。
例如。 今天是 29 号星期五。 管道应获取过去 4/5 周内每个星期五每个业务子类型每小时的预订计数。 即22号星期五、15号星期五、8号星期五和1号星期五。
完成此操作后,管道将获取过去四个星期五每小时的平均值,并将其存储在某个地方。
所以输出看起来像 小时 - 过去 4 个星期五的平均预订小时数 - 商务子类型 1 小时 - 0 次预订 - 航班。 2 小时 - 3 次预订 - 酒店
简而言之,我希望获得过去一个月同一 DayOfWeek 中每个businessSubType 每小时的平均预订量。
这是我正在使用的代码,但它给出了相同的平均值和相同的总预订数。
`[
{
$addFields: {
currentDayOfWeek: { $dayOfWeek: new Date() }
}
},
{
$match: {
createdOn: {
$gte: ISODate("2023-08-01T00:00:00.000Z"),
$lt: new Date(),
},
$expr: {
$eq: [
{ $dayOfWeek: "$createdOn" },
"$currentDayOfWeek"
]
}
}
},
{
$project: {
hour: { $hour: "$createdOn" },
businessSubType: 1,
}
},
{
$group: {
_id: {
hour: "$hour",
businessSubType: "$businessSubType",
},
totalBookings: { $sum: 1 }
}
},
{
$group: {
_id: {
businessSubType: "$_id.businessSubType",
hour: "$_id.hour",
},
monthlyAverage: { $avg: "$totalBookings" },
totalBookings: { $sum: "$totalBookings" }
}
},
{
$project: {
_id: 0,
hour: "$_id.hour",
businessSubType: "$_id.businessSubType",
monthlyAverage: 1,
totalBookings: 1
}
},
{
$sort: {
hour: 1
}
}
]`
你能帮我修复这个管道吗? 非常感谢。
根据您的代码,计算日期范围存在问题:
这是更新后的代码,其中突出显示了
added code
或 modified
或 removed
一个
[
{ $addFields: { currentDayOfWeek: { $dayOfWeek: new Date() } } },
{
$match: {
createdOn: {
$gte: ISODate("2023-08-01T00:00:00.000Z"),
$lt: new Date()
},
$expr: {
$eq: [
{ $dayOfWeek: "$createdOn" },
"$currentDayOfWeek"
]
}
}
},
{
$project: {
hour: { $hour: "$createdOn" },
businessSubType: 1,
week: { $week: "$createdOn" } // <-- ADDED: Extracting the week of the year
}
},
{
$group: {
_id: {
week: "$week", // <-- ADDED: Grouping by week as well
hour: "$hour",
businessSubType: "$businessSubType"
},
bookingsForTheHour: { $sum: 1 } // <-- CHANGED: Renamed from "totalBookings" to "bookingsForTheHour" for clarity of variable what it's doing
}
},
{
$group: {
_id: {
hour: "$_id.hour",
businessSubType: "$_id.businessSubType"
},
monthlyAverage: { $avg: "$bookingsForTheHour" } // <-- CHANGED: Now taking average of the bookings for the hour
}
},
{
$project: {
_id: 0,
hour: "$_id.hour",
businessSubType: "$_id.businessSubType",
monthlyAverage: 1 // <-- REMOVED: The totalBookings field, since it's not required
}
},
{
$sort: {
businessSubType: 1, // <-- ADDED: Sorting by businessSubType as well for better organization of result
hour: 1
}
}
]
试试这个。