Saya pikir Anda ingin melakukan sesuatu seperti ini. Saya tidak menguji kueri ini, tetapi inilah yang akan saya coba di tempat Anda. Ini hanya mungkin pada 3.6 mongodb, karena mendukung banyak gabungan. Idenya adalah untuk bergabung dengan semua 3 koleksi. Pertama bergabung adalah Orang Tua dan Orang dengan id Orang Tua, dan Orang "parentsId". Yang kedua bergabung adalah Orang Tua dan Kakek-nenek. Kemudian Anda menyaring berdasarkan nama kakek-nenek dan Anda akan mendapatkan dokumen yang berisi kakek-nenek itu, putranya (orang tua), dan cucunya (orang). Kemudian Anda tinggal memproyeksikan orang tersebut.
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}}
}])
Saya pikir ini akan berhasil