在字段中使用未知数量的项目创建文档的Mongoose最佳实践

时间:2016-06-15 12:51:17

标签: node.js mongodb mongoose mongoose-schema

我左右看了一下,我写了一些演示代码,写了一些测试来实现学校管理系统。

我想从更习惯于开发mongoose的人那里了解的是,如何以最简单的方式创建此模式,从而可以从这个单个文档中添加尽可能多的地址和联系费用。

我制定了自己的解决方案,但我不知道这是否是最优雅可行的方式,我希望得到经验丰富的人的意见。

我应该为地址,电子邮件和电话号码创建单独的模型吗?

我创建了这个架构。它仍然有一些伪代码,但是为了给出一般的想法很好。

var student = {
    name: String, 
    surname: String, 
    currentClass: {
        type: mongoose.Schema.Types.ObjectId, 
        ref: "Classes"
    }, 
    birthday: {
        year: Number,
        month: Number,
        day: Number
    },
    address: [{
        name: String, 
        zip: Number,
        address: String, 
        city: String, 
        state: String, 
        complement: String
    }]
    accountable: {
        name: String, 
        surname: String, 
        email: [{
            type: String, 
            required: true, 
            lowercase: true
        }], 
    phone: [String, String]
}

我的解决方案是,使用html创建一个新的“电子邮件”或“地址”字段,用户通过点击方式按钮请求。这会生成一个新的输入字段,其名称遵循以下模式: email1,email2,email3,email4

因此,当用户发送数据时,如果我们创建了一个新学生,我首先要创建包含数据的数组并将其发送给mongoose。

如果要更新,我会收到已创建的电子邮件,并使用newEmails.concat(old_emails)

将其添加到新数组中

1 个答案:

答案 0 :(得分:1)

要设计数据库,有很多种情况: 1比1,1比1,多对多。
一对一:你应该将强对象放在另一个中,例如:一个人只能拥有一本护照,那么我们应该把护照对象放在人物对象里面。 一对多,3对一对多 One to Few :少数是少于100个对象,然后你应该在一个对象中添加少数列表,例如: 一个人可以拥有多个地址,如上例所示 一对多:很多是数千,然后你应该把许多的主键放在一个对象的列表中。 一个到太多:然后不要执行上一个解决方案,而是在许多对象的每个对象中添加一个主要解决方案。
最后,多对多:你应该把它们列为双方的名单 检查以下参考文献:
https://www.mongodb.com/blog/post/6-rules-of-thumb-for-mongodb-schema-design-part-1
https://www.mongodb.com/blog/post/6-rules-of-thumb-for-mongodb-schema-design-part-2
https://www.mongodb.com/blog/post/6-rules-of-thumb-for-mongodb-schema-design-part-3


Morover,对于此部分phone: [String, String],您应该将其phone: [String]