我有4个模型,Grid
,Container
,Row
和Column
。我需要初始化一个Grid
,其中3个模型嵌套在其中。
我遇到的问题是创建了对Container
,Row
和Column
的引用(ObjectId
s),但文档本身并非如此保存。仅保存Grid
文档。
我希望它能将其余的模型保存到各自的系列中......
我错过了什么?
以下是我的模型/模式:
const GridSchema = new Schema({
container: {type: mongoose.Schema.Types.ObjectId, ref: 'Container', required: true}
});
const ContainerSchema = new Schema({
rows: [{type: mongoose.Schema.Types.ObjectId, ref: 'Row'}]
});
const RowSchema = new Schema({
columns: [{type: mongoose.Schema.Types.ObjectId, ref: 'Column'}]
});
const ColumnSchema = new Schema({
modules: [{type: mongoose.Schema.Types.ObjectId, ref: 'Module'}]
});
const Grid = mongoose.model('Grid', GridSchema);
const Container = mongoose.model('Container', ContainerSchema);
const Row = mongoose.model('Row', RowSchema);
const Column = mongoose.model('Column', ColumnSchema);
这是我如何启动网格并保存它:
const grid = new Grid({
container: new Container({
rows: [
new Row({
column: [
new Column({
modules: []
})
]
})
]
})
});
grid.save((err, grid) => {
console.log(err, grid); // No error is thrown
});
答案 0 :(得分:1)
当然,由于您没有拨打.save()
来电,因此不会保存嵌套文档。
此外,不是像这样创建,而是单独创建,然后使用它们的引用或变量来处理。这将使您的工作更轻松,更清洁。
编辑指定如何一次进行多次保存。
你可以这样做:
column = new Column({
modules: []
});
row = new Row({
column: [column._id]
});
container = new Container({
rows: [row._id]
});
grid = new Grid({
container
});
Promise.all([column.save(), row.save(), container.save(), grid.save()]).then((docs) => {
//all the docs are conatined in docs, this is success case, i.e. all document gets saved
console.log(docs);
}).catch((error) => {
// handle error here, none of the documents gets saved
// if saving of anyone of the documents fails, it all gets failed
});
Promise.all()对于保存这样的多个文档非常有用。由于Mongodb没有支持交易的功能。
我为迟到的回复道歉。