我想创建一个用户评级的集合,我怀疑2个结构模式。
第一个架构:
var Rating = new mongoose.Schema({
userID: {
type: String,
minlength: 1,
required: true,
trim: true
},
ratings: [{
rate: {
type: Number
}
}]
});
第二个架构:
var Rating = new mongoose.Schema({
userID: {
type: String,
required: true,
},
rating: {
type: Number,
required: true
},
});
第一个模式将导致每个评级被推入评级数组,第二个模式将导致插入相同用户ID的多个文档,并且每个文档包含其评级。
我想知道两者之间建议采用哪种方法,每次用户获得评级时增加数组或增加文档。
这取决于你的项目的细节(没有一个超级好的和通用的架构)。
第一个结构更接近MongoDB意识形态。但是不要忘记文档大小限制(16MB,除非您使用GridFS)。如果您没有大量信息(ratings
字段中的项目),则此结构更好。因为所有评级都在一个文档中,这意味着您的索引将是最佳的(一个用户 - 一个文档)。
当您有大量评级(与文档大小限制相关)时,第二个模式更适合于这种情况。
您也可以使用两个集合。一个用于聚合数据(计算后的最终结果,如缓存),另一个用于详细信息。如前所述 - 最佳解决方案取决于项目的细节
我建议你阅读这篇文章qazxsw poi