我正在使用MongoDB存储用户配置文件,现在我想使用GridFS为每个配置文件存储图片。
我正在比较链接这两个文件的两种方式是:
A)在用户的image
字段中存储对文件ID的引用:
User:
{
"_id": ObjectId('[user_id here]'),
"username": 'myusername',
"image": ObjectId('[file_id here]')
}
B)在文件的元数据中存储对用户的引用:
File metadata:
{
"user_id": ObjectId('[user_id here]')
}
我在很多方面都知道这取决于我并依赖于应用程序的细节(如果有帮助的话,它将是移动的),但我只是想知道这样做是否有任何普遍的好处还是其他的?
答案 0 :(得分:3)
这里的答案实际上取决于您的应用程序的使用模式。我的假设(随意纠正我)是最可能的模式是这样的:
查找用户 - >查找用户 - >显示配置文件(获取图片)
使用此通用用例,使用方法A,您可以找到包含图像对象ID的用户文档(显示配置文件),然后使用该ID获取文件(2个基本操作,您已完成)。
注意:从GridFS实际获取文件我将其视为单个逻辑操作,实际上涉及多个操作,但大多数驱动程序/ API无论如何都会模糊不清。
使用方法B,您将不得不找到用户文档,然后执行另一个查询以在文件元数据集合中查找相关的user_id,然后获取文件。根据我的统计,这是三个操作(方法A没有额外的查找)。
这有意义吗?
当然,如果我的假设不正确并且你的应用程序是(例如)图像驱动的,那么你的查询模式可能会得到不同的答案。