【发布时间】:2023-03-10 13:09:01
【问题描述】:
我的数据库 Mongo 中有一个这样的集合:
/*Order:*/
{
date_order: ISODate("2020-08-02T22:00:00.000Z"),
item: 'banana'
price: '2$'
}
这是我的代码 Mongo,用于获取从 27/07(星期一)到 02/08(星期日)一周内每天的总订单:
db.getCollection('order').aggregate([
{$match: { date_order: {$gte: new Date('2020-07-27T22:00:00Z') , $lt: ISODate("2020-08-02T23:59:59Z")}}},
{$group: {
_id: {$dayOfWeek: '$date_order'},
nbOfOrders: {$sum: 1}
}},
{ $project: {
'_id': 0,
'dayOfWeek': { $subtract: ['$_id', 1] },
'nbOfOrders': '$nbOfOrders'
}
}
])
它给了我结果:
/* 1 */
{
"dayOfWeek" : 0.0, // 0 for MONDAY
"nbOfOrders" : 4.0
}
/* 2 */
{
"dayOfWeek" : 4.0, // 4 for FRIDAY
"nbOfOrders" : 4.0
}
除周一和周五外,其他所有日子都没有人订购任何东西。没有订单的日子应该怎么记录?我想要这样的结果:
/* MONDAY */
{
"dayOfWeek" : 0.0,
"nbOfOrders" : 4.0
}
/* TUESDAY */
{
"dayOfWeek" : 1.0,
"nbOfOrders" : 0.0
}
/* WEDNESDAY */
{
"dayOfWeek" : 2.0,
"nbOfOrders" : 0.0
}
/* THURSDAY */
{
"dayOfWeek" : 3.0,
"nbOfOrders" : 0.0
}
/* FRIDAY */
{
"dayOfWeek" : 4.0,
"nbOfOrders" : 4.0
}
/* SATURDAY */
{
"dayOfWeek" : 5.0,
"nbOfOrders" : 0.0
}
/* SUNDAY */
{
"dayOfWeek" : 6.0,
"nbOfOrders" : 0.0
}
【问题讨论】:
-
这里有一个类似的帖子,有一个答案:Group records by month and count them - Mongoose, nodeJs, mongoDb。请注意,该帖子中的输出是按月(而不是周)分组的。我认为您可以将类似的逻辑应用于您的聚合。
标签: mongodb