Итак, у меня есть следующая схема:
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.