我的Mongoose Schema不正确吗?

时间:2017-09-06 14:59:05

标签: node.js mongoose mongoose-schema

我相信我的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 });
      });
    });
});

1 个答案:

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