我正在撰写一款每天都会收集用户体重信息的应用。我是NoSQL数据库世界的新手。所以我想在一开始就选择正确的架构。
展示案例看起来如此: 用户只说一次关键数据,例如身高或年龄以及用户可以测量体重
现在我这样写了:
var userSchema = new Schema({
randomId: {type: Number, required: false, unique: true },
name: String,
userId: {type: String, required: true},
hight: Number,
gender: String,
waist: Number,
age: Number,
updated: { type: Date, default: Date.now }
});
如何每天存储体重信息?
我是否应该根据重量值和日期创建一个新的重量模型?
var weightSchema = new Schema({
name: String,
userId: {type: String, required: true},
weightValue:{
value: Number,
updated: { type: Date, default: Date.now }
}
});
或者我应该每次都更新文档userSchema?
答案 0 :(得分:1)
实际上,数据模型设计取决于该软件的要求(如何使用数据)。
据我所知,用户 - >权重关系是一对多映射。如果您只想存储用户信息及其权重而没有其他额外要求,那么您的架构就可以了。
因此,您将用户数据存储在用户集合中,一个用户存储一个文档。并且您有另一个集合来存储用户的体重数据,此集合中的多个文档属于一个用户。当您想要获取一个用户及其体重数据时,您必须查询2次:一次在用户集合中,另一次在体重集合中。
但IMO在设计数据模型时应考虑其他方面:
...
我可以轻松更新/删除数据吗?
您可以合并用户架构& 权重模式到一个模式中,用户模式包含一个数组来存储所有用户的权重记录。这被称为Mongodb以常见方式建议的非规范化模型。您的架构如下所示:
(我的PC中没有JS编程环境,所以不确认这可以编译而没有错误。只需将其作为参考。)
var weightSchema = new Schema({
value: Number,
updated: { type: Date, default: Date.now }
});
var userSchema = new Schema({
randomId: {type: Number, required: false, unique: true },
name: String,
userId: {type: String, required: true},
hight: Number,
gender: String,
waist: Number,
age: Number,
weights: [weightSchema], // Here are the weight records.
updated: { type: Date, default: Date.now }
});
mongoose.model('user', userSchema);
现在,您只有一个用于存储用户和收藏的集合。他们的体重数据。一个用户的一个文档。您可以获得一些好处:
但与此同时,您可能会遇到一些问题:
请遵循您的原产地设计。将数据存储在两个单独的集合中。
有很多不同的建模方法,都取决于您的要求。您可以查看Mongodb建模指南:https://docs.mongodb.com/manual/core/data-modeling-introduction/