在文档中存储对gridFS文件的引用的最佳方法是什么?

时间:2012-01-24 19:42:24

标签: mongodb gridfs

我正在使用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]')
}

我在很多方面都知道这取决于我并依赖于应用程序的细节(如果有帮助的话,它将是移动的),但我只是想知道这样做是否有任何普遍的好处还是其他的?

1 个答案:

答案 0 :(得分:3)

这里的答案实际上取决于您的应用程序的使用模式。我的假设(随意纠正我)是最可能的模式是这样的:

查找用户 - >查找用户 - >显示配置文件(获取图片)

使用此通用用例,使用方法A,您可以找到包含图像对象ID的用户文档(显示配置文件),然后使用该ID获取文件(2个基本操作,您已完成)。

注意:从GridFS实际获取文件我将其视为单个逻辑操作,实际上涉及多个操作,但大多数驱动程序/ API无论如何都会模糊不清。

使用方法B,您将不得不找到用户文档,然后执行另一个查询以在文件元数据集合中查找相关的user_id,然后获取文件。根据我的统计,这是三个操作(方法A没有额外的查找)。

这有意义吗?

当然,如果我的假设不正确并且你的应用程序是(例如)图像驱动的,那么你的查询模式可能会得到不同的答案。