我想创建一个按以下方式工作的新闻应用程序:
该站点将包含文章,并且每篇文章都有多个版本。每个版本都是一个docx
文件。文章本身除了版本之外没有任何内容。该集合将如下所示:
{
Id:123,
Versions: [{id:321, docx:"blob"},{id:444, docx:"blob"}]
}
我读过 Mongo 允许您以名为 gridFs 的格式保存文件,但据我了解,它为文件保留了不同的集合,并且不允许您将文件保留为自定义集合的一部分。
有人可以建议按照我描述的方式存储数据的最佳方式是什么吗?
问题是 MongoDB 本身不支持文件版本。所以我们所能做的就是存储不同的版本并使用某种元数据来指示版本,然后找到相应的文件。
将完整的元数据添加到
fs.files
(错误的方式)GridFS 可以将自定义数据存储在文件集合的元数据字段中。
当然,这没有多大意义,因为您会将版本附加到单个文件。
使用
uploadDate
字段(简单的方法)每次将文件保存到 GridFS 时,MongoDB 会自动添加字段
uploadDate
,可用于确定具体版本:请注意,对于这两个文件,文件名是相同的,md5 校验和也是如此。
现在,获取最新版本非常简单:
将版本添加到
fs.files
文档(自定义方式)存储文件时,您可以将版本添加为任意字段,正如文档所述,这是完全可以的:
注意
version
字段。获取文件的最新版本非常简单
一般问题
但是所有这些方法都有一个严重的缺点:如果文档被保存两次,则不保存差异,而是再次保存整个文档。
这让我得出结论,MongoDB 并不真正适合您的用例,除非您可以接受每个版本都是数据的完整副本这一事实。
就个人而言,我可能会使用Git Large File Storage来存储文件并收集元数据。在不了解您的用例的情况下,很难说这是否适合您。