哪种方法更好?

时间:2017-12-20 07:57:31

标签: mongodb mongoose

我想创建一个用户评级的集合,我对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的多个文档,并且每个文档都包含其评级。

我想知道两者之间建议使用哪种方法,每次用户获得评级时增加数组或增加文档。

1 个答案:

答案 0 :(得分:1)

这取决于项目的细节(没有一个超级好的通用模式)。

第一个结构更接近MongoDB意识形态。但是不要忘记文档大小限制(16MB,除非您使用GridFS)。如果您没有大量信息(ratings字段中的项目),则此结构会更好。因为所有评级都在一个文档中,这意味着您的索引将是最佳的(一个用户 - 一个文档)。

当您拥有大量评级(与文档大小限制相关)时,第二种模式更适用于这种情况。

此外,您可以使用两个集合。一个用于聚合数据(计算后的最终结果,如缓存),另一个用于详细信息。如前所述 - 最佳解决方案取决于项目的细节

我让你重读这篇文章6 Rules of Thumb for MongoDB Schema Design