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

Mat*_*fer 6 mongodb gridfs

我正在使用MongoDB存储用户配置文件,现在我想使用GridFS为每个配置文件存储图片.

我正在比较链接这两个文件的两种方式是:

A)在用户的image字段中存储对文件ID的引用:

User: 
{
  "_id": ObjectId('[user_id here]'),
  "username": 'myusername',
  "image": ObjectId('[file_id here]')
}
Run Code Online (Sandbox Code Playgroud)

B)在文件的元数据中存储对用户的引用:

File metadata: 
{
  "user_id": ObjectId('[user_id here]')
}
Run Code Online (Sandbox Code Playgroud)

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

Ada*_*ord 5

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

查找用户 --> 查找用户 --> 显示个人资料(获取图片)

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

注意:从 GridFS 实际获取文件我将其视为单个逻辑操作,实际上涉及多个操作,但大多数驱动程序/API 无论如何都掩盖了这一点。

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

那有意义吗?

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