Свести родительскую дочернюю коллекцию с помощью mongodb - PullRequest
1 голос
/ 10 марта 2019

Мне нужно выровнять коллекцию родительских детей в mongodb.Это похоже на вопрос, заданный для sql по адресу:

Свести родительскую дочернюю иерархию с несколькими родителями

Моя коллекция похожа на категорию: {_id, тип, имя, родитель:(сопоставлено с самим собой, т.е. с коллекцией категорий))}

А текущая глубина потомка равна 3 с типом L1, L2, L3

Результат будет с полями: (L1_id, L1_name, L2_id,L2_name, L3_id, L3_name)

Пожалуйста, помогите

1 Ответ

1 голос
/ 16 марта 2019

Вы можете использовать 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 $ и $ документация проекта .

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...