我更好地分裂一个精心制作的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 });
我们说:
-
对于login的用户,只能返回
id
,name
,email
,phone
和location
。 -
第一个模型将使用投影查询来返回(1)中的属性。
-
在第二种情况下,只有
UserMinimalSchema
将被用来查询整个文档。 -
实质上两个查询都返回与(1)中所述完全相同的数据量。
-
假设平均用户对象约为16MB,并且有100万条logging。
如果有人进行了这样的testing/链接到文档,这将是很大的帮助,看看有多less事情要分裂或不。
我不会使用拆分模型:
- 每次要查看所有用户的数据时,都必须执行填充查询
- 您正在增加数据存储(现在您将不得不在用户详细信息模式中引用该用户。
- 当Mongo将执行查找时,它将查找对模型实例的引用,并只提取您在投影查询中指定的数据。 除非在查询中指定,否则不会将整个对象加载到内存中。