是我的猫态模式不正确



我相信我的猫鼬模式必须不正确,因为当我在猫鼬中使用.save()时,我的db无法正确更新。在以下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: []
                    }
                ]
            },
        ]
    });

现在这是我的词汇模式:

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 });
      });
    });
});

使用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,
          },
        }

最好的是使用sub schema tho,例如:

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,
  },
})

最新更新