MongoDB Список категорий детей в родительской категории - PullRequest
1 голос
/ 02 февраля 2020

Итак, у меня есть следующая схема:

const CategorySchema = new Schema({
    name: {
        type: String,
        required: true,
    },
    parent: {
        type: Schema.Types.ObjectId,
        ref: 'Category',
        default: null,
    },
    order: {
        type: Number,
        required: true,
        min: 0,
    }
});

Итак, я хотел бы получить следующий вывод (я просто указал простые _ids для простоты примера):

[
    {
        _id: '1',
        name: 'MainCategory1',
        parent: null,
        order: 0,
        children: [
            {
                _id: '3',
                name: 'SubCategory3',
                parent: '1',
                order: 0,
            },
        ]
    },
    {
        _id: '2',
        name: 'MainCategory2',
        parent: null,
        order: 1,
        children: [
            {
                _id: '4',
                name: 'SubCategory1',
                parent: '2',
                order: 0,
            },
            {
                _id: '5',
                name: 'SubCategory2',
                parent: '2',
                order: 1,
            },
        ]
    },
]

Итак как я мог получить этот результат? Обратите внимание, что он должен быть отсортирован по полю «заказ», как для родителей, так и для детей.

Также возможно ли получить этот результат с помощью запроса mon goose вместо агрегирования?

Я знаю, что это могло бы быть проще, если бы я хранил массив «children» в Schema вместо «parent», но этот подход мне нравится больше, потому что в каждой категории есть только одна ссылка на parent, и do c не увеличивается с массив объектов. С другой стороны, массив "children" мог бы быть действительно огромным, и я думаю, что mon go работает быстрее, если при поиске смотрит на одно "родительское" значение, вместо просмотра массива "children", который может быть более 100 элементов ObjectIds.

1 Ответ

1 голос
/ 03 февраля 2020

Здесь нет способа использовать обычный .find(), но вы можете воспользоваться преимуществами $ graphLookup Aggregation Framework * *.

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