Reputation: 191
I have a collection called article_parent
with documents like this:
{ "name": "name1", "group": 1 }
{ "name": "name2", "group": 1 }
{ "name": "name3", "group": 2 }
{ "name": "name4", "group": 3 }
{ "name": "name5", "group": 2 }
and I have other collection called article
which store all my post
{"parent_name": "name1", "value": "val1"}
{"parent_name": "name2", "value": "val2"}
{"parent_name": "name3", "value": "val3"}
{"parent_name": "name4", "value": "val4"}
{"parent_name": "name5", "value": "val5"}
I Want to get all articles that article_parent.group
is 2 like this
{"parent_name": "name3", "value": "val3", parent: { "name": "name3", "group": 2 }}
{"parent_name": "name5", "value": "val5", parent: { "name": "name5", "group": 2 }}
I have this query :
db.article.aggregate([{
$lookup: {
from: "article_parent",
let: {
name: "$parent_name"
},
pipeline: [
{ $match: { group: 2 } }
],
as: "parent"}}
])
but the query not found any article
Where is my query wrong?
What can I do?
Thanks
Upvotes: 1
Views: 219
Reputation: 8894
What you have tried is appreciated. You tried to use uncorrelated-sub-queries. So when you use a variable inside pipeline which you defined inside let
, you need to use $expr. The problem you have done was, you didn't join both collections by one particular field.
[
{
$lookup: {
from: "article_parent",
let: {
pname: "$parent_name"
},
pipeline: [
{
$match: {
$expr: {
$eq: [
"$name",
"$$pname"
]
},
group: 2
}
}
],
as: "parent"
}
},
{
$match: {
parent: {
$ne: []
}
}
}
]
Working Mongo playground
Upvotes: 1