我有一个MongoDB表DOCUMENTS,其中包含国家/地区、月份和交付合作伙伴名称列,
它们如下所示-
[{
"id": "1",
"month": "Jan",
"deliveryPartner": {
"name": "Lalamove"
},
"country": "ID"
},
{
"id": "2",
"month": "Jan",
"deliveryPartner": {
"name": "Lalamove"
},
"country": "ID"
},
{
"id": "3",
"month": "Jan",
"deliveryPartner": {
"name": "Borzo"
},
"country": "ID"
},
{
"id": "4",
"month": "Jan",
"deliveryPartner": {
"name": "Lalamove"
},
"country": "PH"
},
{
"id": "5",
"month": "Jan",
"deliveryPartner": {
"name": "Borzo"
},
"country": "PH"
},
{
"id": "6",
"month": "Feb",
"deliveryPartner": {
"name": "Borzo"
},
"country": "ID"
},
{
"id": "7",
"month": "Feb",
"deliveryPartner": {
"name": "Borzo"
},
"country": "ID"
},
{
"id": "8",
"month": "Feb",
"deliveryPartner": {
"name": "Lalamove"
},
"country": "PH"
}
]
我想要编写一个聚合查询,它会给出如下所示的输出-
[
{
"deliveryPartner": "Lalamove",
"country": "ID",
"month": [
{
"Jan": 2
},
{
"Feb": 0
}
]
},
{
"deliveryPartner": "Borzo",
"country": "ID",
"month": [
{
"Jan": 1
},
{
"Feb": 2
}
]
},
{
"deliveryPartner": "Lalamove",
"country": "PH",
"month": [
{
"Jan": 1
},
{
"Feb": 1
}
]
},
{
"deliveryPartner": "Borzo",
"country": "PH",
"month": [
{
"Jan": 1
},
{
"Feb": 0
}
]
}
]
我try 了以下查询,但输出不是预期的结果-
let result = await con.aggregate([
{ $match : { year : "2023", "deliveryPartner.name": { $ne: null }, "country": { $ne: null }, "month": { $ne: null } } },
{
$group: {
_id: {
deliveryPartner: "$deliveryPartner.name",
country: "$country",
month: "$month"
},
count: { $sum: 1 }
}
},
{
$group: {
_id: {
deliveryPartner: "$_id.deliveryPartner",
country: "$_id.country"
},
monthData: {
$push: {
month: "$_id.month",
count: "$count"
}
}
}
}
]).toArray();
console.log("result => ", JSON.stringify(result));
输出不会将缺少的月份计数设置为0