我相信我的Mongoose Schema必须不正确,因为当我在Mongoose中使用.save()时,我的数据库无法正确更新。运行以下nodeJS路由后,回调中收到的更新对象是正确的,但在后续运行中,DB对象为空,并且从未更新。
以下是我的数据的示例:
var newApplicationData = new ApplicationData({
pos1: 0,
pos2: 0,
applicationData: [
// Standard One
{
sections: [
{
narrative: '',
documentation: []
},
{
narrative: '',
documentation: []
},
{
narrative: '',
documentation: []
}
]
},
// Standard 2
{
sections: [
{
narrative: '',
documentation: []
},
{
narrative: '',
documentation: []
},
{
narrative: '',
documentation: []
},
{
narrative: '',
documentation: []
}
]
},
// Standard 3
{
sections: [
{
narrative: '',
documentation: []
},
{
narrative: '',
documentation: []
},
{
narrative: '',
documentation: []
},
{
narrative: '',
documentation: []
},
{
narrative: '',
documentation: []
},
{
narrative: '',
documentation: []
},
{
narrative: '',
documentation: []
}
]
},
// Standard 4
{
sections: [
{
narrative: '',
documentation: []
},
{
narrative: '',
documentation: []
},
{
narrative: '',
documentation: []
},
{
narrative: '',
documentation: []
},
{
narrative: '',
documentation: []
},
{
narrative: '',
documentation: []
},
{
narrative: '',
documentation: []
},
{
narrative: '',
documentation: []
},
{
narrative: '',
documentation: []
}
]
},
]
});
现在这是我的Mongoose Schema:
const mongoose = require('mongoose');
const ApplicationDataSchema = mongoose.Schema({
pos1: {
type: Number,
required: true,
},
pos2: {
type: Number,
required: true,
},
applicationData: {
type: Array,
required: true,
sections: {
type: Array,
required: true,
narrative: {
type: String,
required: true
},
documentation: {
type: Array,
required: true
}
}
}
}, { collection : 'applicationData' });
const ApplicationData = module.exports = mongoose.model('ApplicationData', ApplicationDataSchema);
最后,这是我的NodeJS路由,我试图使用.save()来保存数据:
app.post('/upload', multer({ storage: storage }).single('file'), (req, res) => {
if(!req.file) return res.send({ status: 400, msg: 'No File Received.' });
let pos1 = req.body.pos1;
let pos2 = req.body.pos2;
ApplicationData.findById(mongoose.Types.ObjectId(req.body.applicationDataID), (err, applicationDataObject) => {
if(err) return res.send({ status: 400, msg: err });
applicationDataObject.applicationData[pos1].sections[pos2].documentation.push(req.file.filename);
applicationDataObject.save((err, updatedApplicationData) => {
console.log(applicationDataObject.applicationData[pos1].sections[pos2].documentation);
if(err) return res.send({ status: 400, msg: err });
return res.send({ status: 200, applicationData: updatedApplicationData.applicationData });
});
});
});
答案 0 :(得分:2)
当您使用array of object
时,请将object description
放入type
{
pos1: {
type: Number,
required: true,
},
pos2: {
type: Number,
required: true,
},
applicationData: {
type: [{
sections: {
type: [{
narrative: {
type: String,
required: true,
},
documentation: {
type: Array,
required: true,
},
}],
required: true,
},
}],
required: true,
},
}
最好使用子模式,例如:
const subSchema2 = new mongoose.Schema({
narrative: {
type: String,
required: true,
},
documentation: {
type: Array,
required: true,
},
})
const subSchema1 = new mongoose.Schema({
sections: {
type: [subSchema2],
required: true,
},
})
const finalSchema = new mongoose.Schema({
pos1: {
type: Number,
required: true,
},
pos2: {
type: Number,
required: true,
},
applicationData: {
type: [subSchema1],
required: true,
},
})