Заполнить вложенный массив до n-го уровня - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть 3 модели схем Родитель , Дети и Игрушки . Для каждого родителя существует множество детей, а для каждого ребенка также может быть множество детей и игрушек. Как я буду заполнять массив Children до n-го уровня?

Родитель

const parentSchema = new Schema({
  name: String,
  description: String,
  children: [{ type: Schema.Types.ObjectId, ref: 'Children' }]
}, {
  collection: 'parent'
})
module.exports = Model('Parent', parentSchema)

Дети

const childrenSchema= new Schema({
  ancestor: { type: Schema.Types.ObjectId, ref: 'Parent' },
  parent: { type: Schema.Types.ObjectId, ref: 'Children' },
  name: String,
  toys: [
    { type: Schema.Types.ObjectId, ref: 'Toys' }
  ],
  children: [
    { type: Schema.Types.ObjectId, ref: 'Children' }
  ]
}, {
  collection: 'children'
})
module.exports = Model('Children', childrenSchema)

Игрушки

const toysSchema= new Schema({
  name: String,
  description: String,
}, {
    collection: 'toys'
})
module.exports = Model('Toys', toysSchema)

Образец результата

{
    "_id": "123456",
    "name": "Parent Name",
    "description": "Some Description",
    "children": [
        {
            "_id": "qwerty"
            "ancestor": "123456",
            "parent": "",
            "name": "children_level_1",
            "toys": [],
            "children": [
                {
                    "_id": "asdfg"
                    "ancestor": "123456",
                    "parent": "qwerty",
                    "name": "children_level_2A",
                    "toys": [
                        {
                            "_id": "1aj2k5h"
                            "name": "toy_1",
                            "description": "Toy"
                        }
                    ],
                    "children": [
                        {
                            "_id": "zxcvb"
                            "ancestor": "123456",
                            "parent": "asdfg",
                            "name": "children_level_2",
                            "toys": [],
                            "children": []
                        }
                    ]
                },
                {
                    "_id": "yuiop"
                    "ancestor": "123456",
                    "parent": "qwerty",
                    "name": "children_level_2B",
                    "toys": [],
                    "children": []
                }
            ]
        }
    ]
}

Есть ли способ заселить детей и игрушки до n-го уровня? сейчас я просто использую жестко запрограммированное заполнение, но оно неэффективно, когда уровень вложенного массива идет глубже. Я думаю, есть ли какое-то решение, кроме рекурсивного или глубокого заполнения? Я не очень знаком с манипуляциями на мангусте, и я также пробовал несколько решений из Интернета, но ни одно из них не решило мою проблему.

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