我使用GridFS和C#官方驱动程序存储文件。 我正在模仿文件夹结构,并将完整的目录路径存储在元数据中(即/ folder1 / subfolder1)。我还使用MongoDB的内置版本控制功能存储文件的多个版本。 这允许我使用以下方法查询特定文件夹中的文件:
var filesQuery = Query.EQ("metadata.ParentPath", myParentPath);
var filesMongo = MongoDatabase.GridFS.Find(filesQuery);
我的问题是此查询返回所有文件,包括旧文件。 如何插入version参数并仅返回上次上传的文件(在C#驱动程序的FindOne方法中使用)? 我不知道如何在查询中包含它(“版本”不起作用,因为据我所知,内部上传日期处理它。)
谢谢!
答案 0 :(得分:1)
我想不出有什么办法可以编写查询来返回ParentPath中每个文件的最新版本。如果你只是返回一个文件,你可以按uploadDate降序排序,只取第一个(就像驱动程序一样),但当你返回目录中的所有文件时,这个技巧不起作用。
你可以写一个map / reduce工作来做这件事,但这可能有点过头了。
您还可以向元数据添加另一个布尔值(例如metadata.isCurrentVersion)以标记每个文件的当前版本。每次上传较新版本时,您都可以在所有旧版本上清除该标记,但这样可以轻松查询当前版本。
只要你没有太多版本的每个文件,我认为你最好的解决方案是做过滤客户端的这一部分。
如果存储了许多文件,您可能希望确保在metadata.ParentPath上有索引。