こういうことをしたいと思います。私はこのクエリをテストしませんでしたが、これは私があなたの代わりに試みることです。複数の結合をサポートしているため、これは3.6mongodbでのみ可能です。アイデアは、3つのコレクションすべてに参加することです。最初の参加は、Parents and Person by Parents id、およびPersons"parentsId"です。 2番目の参加者は親と祖父母です。次に、祖父母の名前で除外すると、その祖父母、彼の息子(親)、および彼の孫(人)を含むドキュメントが取得されます。次に、その人を投影するだけです。
db.Parents.aggregate([
{
$lookup:{
from:"Person",
localField:"_id",
foreignField:"parentId",
as:"Person"
}
},
{
$unwind:"$Person"
},
{
$lookup:{
from:"Grandparents",
localField:"grandparentId",
foreignField:"_id",
as:"Grandparents"
}
},
{
$unwind:"$Grandparents"
},
{$match:{Grandparents.name:"x"}},
{$project:{Person.name:1,Person._id:1}}
}])
これでうまくいくと思います