'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 |
|---|
