Этого можно добиться с помощью 2 этапов агрегирования.
Первый - сопоставить 2 массива в один массив.
Второй - фильтрация одного массива с включением только HIGH (/ LOW), и сокращение отфильтрованного массива до единого элемента суммы.
[{$project: {
"Quality": {
$map: {
input: {$range: [0, {$size: "$Quality"}]},
as: "idx",
in: {
"Quality": { $arrayElemAt: ["$Quality", "$$idx"] },
"Pages": { $arrayElemAt: ["$Pages", "$$idx"] }
}
}
}
}}, {$project: {
"HIGH": {
$reduce: {
input: {
$filter: {
input: "$Quality",
as: "x",
cond: {$eq: ["$$x.Quality", "HIGH"]}
}
},
initialValue: 0,
in: {
$add: ["$$value", "$$this.Pages"]
}
}
},
"LOW": {
$reduce: {
input: {
$filter: {
input: "$Quality",
as: "x",
cond: {$eq: ["$$x.Quality", "LOW"]}
}
},
initialValue: 0,
in: {
$add: ["$$value", "$$this.Pages"]
}
}
}
}}]
Что дает именно то, что вы просили:
{
_id: 1
HIGH:27
LOW:22
}