Вам необходимо сохранить предопределенный массив пустых значений в переменной,
let dayOfWeek = [
{"dayOfWeek": 0, "nbOfOrders": 0},
{"dayOfWeek": 1, "nbOfOrders": 0},
{"dayOfWeek": 2, "nbOfOrders": 0},
{"dayOfWeek": 3, "nbOfOrders": 0},
{"dayOfWeek": 4, "nbOfOrders": 0},
{"dayOfWeek": 5, "nbOfOrders": 0},
{"dayOfWeek": 6, "nbOfOrders": 0} ]
Агрегационный запрос: Площадка ,
db.collection.aggregate([
{
$match: {
date_order: {
$gte: ISODate("2020-07-27T22:00:00Z"),
$lt: ISODate("2020-08-10T23:59:59Z")
}
}
},
{
$group: {
_id: { $dayOfWeek: "$date_order" },
nbOfOrders: { $sum: 1 }
}
},
{
$project: {
_id: 0,
dayOfWeek: {
$subtract: ["$_id", 1]
},
nbOfOrders: "$nbOfOrders"
}
},
{
$group: {
_id: null,
items: { $push: "$$ROOT" }
}
},
{
$addFields: {
items: {
"$concatArrays": ["$items", dayOfWeek]
}
}
},
{ $unwind: "$items" },
{
$group: {
_id: "$items.dayOfWeek",
nbOfOrders: { $sum: "$items.nbOfOrders" }
}
},
{
$project: {
_id: 0,
dayOfWeek: "$_id",
nbOfOrders: "$nbOfOrders"
}
}
])
Примечание: Когда вы выполняете запрос агрегирования, это очень длительный процесс и снижает производительность вашего запроса, я говорю о В частности, этот требуемый результат,
, я предлагаю сделать это вне запроса, используя l oop, потому что есть только счетные 7 дней недели, а l oop быстрее, чем этот запрос,
Я не добавляю сюда l oop примеров, потому что я не уверен, какой язык вы используете.