如何在GridFS中执行更新操作(使用Java)?

我正在使用Mongo-Java-Driver 2.13我在GridFS中存储了一个PDF文件( 大小30mb) 。 我能够轻松地执行插入,删除和查找操作。

  MongoClient mongo = new MongoClient("localhost", 27017); DB db = mongo.getDB("testDB"); File pdfFile = new File("/home/dev/abc.pdf"); GridFS gfs = new GridFS(db,"books"); GridFSInputFile inputFile = gfs.createFile(pdfFile); inputFile.setId("101"); inputFile.put("title", "abc"); inputFile.put("author", "xyz"); inputFile.save(); 

数据保存在books.filesbooks.chunks集合中。 现在我要更新

  • 案例1:pdf文件
  • 案例2:标题或作者

如何在GridFS中对案例1执行这些更新操作?

我开始知道我需要维护我的文件的多个版本并选择正确的版本。 有人可以说清楚吗?

编辑

我可以轻松更新元数据(标题,作者)。

  GridFSDBFile outputFile = gfs.findOne(new BasicDBObject("_id", 101)); BasicDBObject updatedMetadata = new BasicDBObject(); updatedMetadata.put("name", "PG"); updatedMetadata.put("age", 22); outputFile.setMetaData(newMetadata); outputFile.save(); 

在GridFS中,您不是删除/删除单个文档,而是实际上是一堆文档(文件被拆分为块,每个块都是一个单独的文档)。 这意味着以primefaces方式替换文件是不可能的。

你可以做的是:

  1. 插入具有新名称的新文件
  2. 发生这种情况后(使用副本确认写入问题),更新对旧文件的所有引用以指向新文件
  3. 收到确认后,您可以删除旧文件

GridFS是一种hackishfunction。 通常最好只使用具有真实文件系统的单独文件服务器来存储文件内容,并仅将元数据存储在MongoDB中。