Reproduction in Mongo Playground个
我有一个聚合管道,它包含一个$lookup
阶段,然后是$match
阶段,然后是$group
阶段.
奇怪的是(至少对我来说),$match
阶段输出一个文档(可以通过临时删除$group
阶段来看到),而$group
阶段之后输出零个文档.如果$group
阶段有任何输入文档,我希望它始终至少有一个输出文档.为什么这里不是这样呢?
上面的Mongo操场链接重现了有问题的行为.
下面是不输出任何文档的聚合管道:
db.orders.aggregate([
{
"$lookup": {
"from": "products",
"localField": "products.0.productId",
"foreignField": "_id",
"as": "firstProduct"
}
},
{
"$match": {
"firstProduct.0.name": "Apron"
}
},
{
"$group": {
"_id": null,
"numOrders": {
$sum: 1
}
}
}
]);
这是删除了小组赛阶段后的相同管道.它返回一个文档.
db.orders.aggregate([
{
"$lookup": {
"from": "products",
"localField": "products.0.productId",
"foreignField": "_id",
"as": "firstProduct"
}
},
{
"$match": {
"firstProduct.0.name": "Apron"
}
}
]);
以下是这orders
个Collection 中的内容:
[
{
"products": [
{
"productId": {
"$oid": "00000001f1438712ca040fca"
}
}
]
}
]
以下是这products
个Collection 中的内容:
[
{
"name": "Apron",
"_id": {
"$oid": "00000001f1438712ca040fca"
}
}
]
MongoDB版本为6.0.4.我在4.4.19中也try 了,行为是相同的.