我左右看了一下,我写了一些演示代码,写了一些测试来实现学校管理系统。
我想从更习惯于开发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)
答案 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]