Вы можете использовать mongodb aggregation pipeline
для достижения того же. Более конкретно, вы можете использовать $lookup
дважды, чтобы заполнить parent
и его parent
, и, наконец, $project
, чтобы сгладить структуру.
Попробуйте это:
Category.aggregation([{
$lookup : {
from :"categories",
localField : "parent",
foreignField : "_id",
as :"parent"
}
},{
$unwind : "$parent"
},{
$lookup : {
from :"categories",
localField : "parent.parent",
foreignField : "_id",
as :"parent.parent"
}
},{
$unwind : "$parent.parent"
},{
$project : {
l1_id : "$_id",
l1_name : "$name",
l2_id : "$parent._id",
l2_name : "$parent.name" ,
l3_id : "$parent.parent._id",
l2_name : "$parent.parent.name"
}
}]).then(result => {
// result will have l1_id, l1_name, l2_id, l2_name, l3_id, l3_name
// where l2 is the parent,
// and l3 is the parent of parent
}).
Примечание: $unwind
используется после $lookup
stage, так как $lookup
возвращает массив, нам нужно развернуть его, чтобы преобразовать его в объект.
Для получения дополнительной информации, пожалуйста, прочитайте Документация поиска Mongodb $ и $ документация проекта .
Надеюсь, это поможет вам.