如何将Mongoose模式中的对象数组保存到MongoDB

时间:2019-08-19 12:34:58

标签: node.js mongodb vue.js mongoose mongoose-schema

因此,我一直在尝试使用mongoose将对象数组保存到Mongo数据库。理想情况下,我希望获得以下结果:https://gyazo.com/73062dc49c97dd9225d091f322c081a6

我通过在默认Vue数据对象中创建一个带有一个对象的数组来达到此结果,如下所示:

experience: [
                    {
                        company: '',
                        position: '',
                        description: '',
                        website: '',
                        timeperiod: [],
                        id: guid()
                    },
                ],

然后通过遍历此数组并为数组中的不同项目创建一个输入字段来创建表单。当用户想要添加一些工作经验时,将触发以下方法:

addWorkExperience() {
                this.experience.push({
                    company: '',
                    position: '',
                    description: '',
                    website: '',
                    timeperiod: [],
                    id: guid()
                })
            },

那么到目前为止,我已经尝试了什么?目前,我可以使用以下代码将对象保存在Mongo数据库中,首先在创建表单的Vue组件中,我有一个空的education{}对象。然后在同一组件中,使用五个输入字段创建表单(下面的代码中只有一个用于演示目的):

            <el-col :span="8">
                <el-form
                    @submit.prevent="addPost"
                    ref="form"
                    style="margin-left: 10px;"
                >
                    <el-row :gutter="20">
                        <el-col :span="12">
                            <el-form-item label="School">
                                <el-input v-model="education.school" />
                            </el-form-item>
                        </el-col>
                    </el-row>
                </el-form>
            </el-col>

将此表单保存到数据库的“我的模式”:

let Education = new Schema({
    school: {
        type: String
    },
    degree: {
        type: String
    },
    description: {
        type: String
    },
    website: {
        type: String
    },
    timeperiod: {
        type: Array
    }
}, {
        collection: 'education'
    });

最后,当用户将表单提交到数据库时,将触发以下方法:

addPost() {
                let url = 'http://localhost:4000/alleducation/addeducation';
                this.axios.post(url, this.education).then(() => {
                    this.$router.push({ name: 'alleducation' });
                });
            },

那我要实现什么?在我的项目中,我希望用户能够输入工作经验并动态添加更多工作经验,就像我在此问题中包含的gif一样。然后,我想将该对象数组发送到数据库。当前,当我将架构作为具有相同输入字段(学校,学位,描述,网站,时间段)的对象数组时,我无法将其存储到数据库中。它存储一个空数组:

{ "_id" : ObjectId("5d5a95d4ce2d421c3e310998"), "education" : [ ], "__v" : 0 } 

非常感谢您的帮助。如果您需要更多信息,请随时询问。预先非常感谢:-)。

0 个答案:

没有答案