Details
-
Bug
-
Resolution: Unresolved
-
Major - P3
-
None
-
7.0.0, 6.0.6
-
None
-
Query Optimization
-
ALL
Description
When I try to run the aggregation below, which has a nesting of $facet -> $lookup -> $facet -> $lookup, I get the error message "$lookup is not allowed to be used within a $facet stage". This message is wrong, since $lookup is indeed allowed in a $facet stage and works fine. The problem with the pipeline is that it has a $facet inside a $facet, which is not allowed.
This is the pipeline that results in the wrong error message:
db.data.aggregate([
|
{ "$facet" : { |
"result" : [ |
{ "$match" : { "ref1" : { "$exists" : true }}}, |
{ "$lookup" : { |
"from" : "data", |
"localField" : "ref1", |
"foreignField" : "_id", |
"pipeline" : [ |
{ "$facet" : { |
"result" : [ |
{ "$match" : { "ref2" : { "$exists" : true }}}, |
{ "$lookup" : { |
"from" : "data", |
"localField" : "ref2", |
"foreignField" : "_id", |
"as" : "ref2" }}]}}], |
"as" : "ref1" }}]}}]) |
On the other hand, for a pipeline with a $facet immediately nested within another $facet, the message is correct. This pipeline:
db.data.aggregate([{"$facet" : { "x" : [ {"$facet" : { "y" : [] }}]}}]) |
results in the correct message "$facet is not allowed to be used within a $facet stage"
The problem is the same in both 6.0.6 and 7.0.0.