Acho que você quer fazer algo assim. Eu não testei essa consulta, mas isso é o que eu tentaria no seu lugar. Isso só é possível no mongodb 3.6, porque ele suporta várias junções. A ideia é juntar as 3 coleções. A primeira junção é Pais e Pessoa por id de Pais e Pessoas "parentsId". A segunda junção é Pais e Avós. Em seguida, você filtra pelo nome do avô e obterá um documento que contém esse avô, seu filho (pai) e seu neto (pessoa). Então você apenas projeta a pessoa.
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}}
}])
Eu acho que isso vai fazer o truque