'How to save a 'refPath' component collection

MODELS:

 const layout = new schema({
            children: [{
                    type: schema.ObjectId,
                    required: true,
                    ref: "component"
                }]
        },{ timestamps: true })

    const row = new schema({
        children: [{
            type: schema.Types.ObjectId,
            required: true,
            ref: 'component'
        }]
    },{ timestamps: true })

    const column = new schema({
        children: [{
            type: schema.Types.ObjectId,
            required: true,
            ref: 'component'
        }]
    },{ timestamps: true })

const component = new schema({
    item: {
        type: schema.Types.ObjectId,
        required: false,
        refPath: 'itemType'
    },

    itemType: {
        type: String,
        required: false,
        enum: ["myText","row", "column"]
    }
},{ timestamps: true })

AND LAST MODEL

const myText = new schema({
    title: { type: String, required: false },
    text: { type: String, required: false },
    media: {
        type: schema.Types.ObjectId,
        required: false,
        refPath: 'mediaType'
    },

    mediaType: {
        type: String,
        required: false,
        enum: 'myImage'
    }

},{ timestamps: true })

CONTROLLER - don't correct work

    const setLayout = async (req, res) => {
  const { body } = req;
  if (!body) {
    return res.status(400).json({
        success: false,
        error: "You must provide a Room",
    });
}
     component.collection.insertMany(body.children, function (err, docs) {
      if (err){ 
         conasolw.log(err);
      } else {
        var ids =  docs.ops.map(doc=>{ return doc._id});
        let newParent = Layout({
          children : ids
         });
         newParent.save((err, result) => {
           console.log('parent save');
        })
      }
    });

OBJECT TO SAVE

let layout = {
    "children": [
        {
            "item": {
                "children": [
                    {
                        "item": {
                            "children": [
                                {
                                    "item": {
                                        "item": {
                                            "title": "12345",
                                            "text": "dsfkd",
                                            "media": {
                                                "name": "gfdgdsada",
                                                "src": "2",
                                                "type": "jpg"
                                            },
                                            "mediaType": "myImage"
                                        },
                                        "itemType": "myText"
                                    },
                                    "itemType": "component"
                                }
                            ]
                        },
                        "itemType": "column"
                    }
                ]
            },
            "itemType": "row"
        }
    ]
}

Save DB result When I save objects sequentially from myText to Layout everything works fine Normal state

{ _id: ObjectId('624ddd442997df031a019b80'), item: '624ddbaf34e91302a50ad292', itemType: 'row' }

Broken state When I save complete object with all nested objects it breaks

{
    _id: ObjectId('624d7fc255b73404586836c5'),
    item: {
        children: [
            {   ...   },
                itemType: 'column'
            }
        ]
    },
    itemType: 'row'
}

What is correct way to save it?



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source