Jeg tror, du vil gøre sådan noget. Jeg testede ikke denne forespørgsel, men dette er hvad jeg ville prøve i dit sted. Dette er kun muligt på 3.6 mongodb, fordi det understøtter flere joinforbindelser. Tanken er at deltage i alle 3 samlinger. Første deltagelse er Forældre og Person efter Forældre-id, og Personer "parentsId". Andet medlem er forældre og bedsteforældre. Derefter filtrerer du ud efter bedsteforældres navn, og du får et dokument, der indeholder den bedsteforælder, hans søn (forælder) og hans barnebarn(person). Så projicerer du bare personen.
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}}
}])
Jeg tror, det vil gøre det trick