我更好地分裂一个精心制作的mongoose模型?

假设/login API的情况下,对于一组匹配的凭证,应该返回来自集合的用户对象,哪种方法会更有效:

1)一个带投影查询的模型:

 var UserSchema = new Schema({ name : String, email : String, dob : Number, phone : Number, gender : String, location : Object, // GeoJSON format {type: 'Point', geometry: { lat: '23.00', lng: '102.23' }} followers : [UserSchema], following : [UserSchema], posts : [PostSchema], groups : [GroupSchema] // ... and so on }); 

2)拆分模型:

 var UserMinimalSchema = new Schema({ name : String, email : String, phone : Number, location : Object, }); var UserDetailSchema = new Schema({ dob : Number, gender : String, followers : [UserSchema], following : [UserSchema], posts : [PostSchema], groups : [GroupSchema] // ... and so on }); 

我们说:

  1. 对于login的用户,只能返回idnameemailphonelocation

  2. 第一个模型将使用投影查询来返回(1)中的属性。

  3. 在第二种情况下,只有UserMinimalSchema将被用来查询整个文档。

  4. 实质上两个查询都返回与(1)中所述完全相同的数据量。

  5. 假设平均用户对象约为16MB,并且有100万条logging。

如果有人进行了这样的testing/链接到文档,这将是很大的帮助,看看有多less事情要分裂或不。

我不会使用拆分模型:

  1. 每次要查看所有用户的数据时,都必须执行填充查询
  2. 您正在增加数据存储(现在您将不得不在用户详细信息模式中引用该用户。
  3. 当Mongo将执行查找时,它将查找对模型实例的引用,并只提取您在投影查询中指定的数据。 除非在查询中指定,否则不会将整个对象加载到内存中。