使用SpringDataMongoDB用新内容替换现有的GridFS文件

使用SpringDataMongoDB用新内容替换现有的GridFS文件,mongodb,spring-data,gridfs,Mongodb,Spring Data,Gridfs,我在MongoDB GridFS中有一些数据。我正在使用Spring DataGridFsOperations类来执行我的GridFS读/写操作 我需要替换现有GridFS文件的内容,即\u id和文件名应保持不变,但文件内容应更新 Spring数据[GridFsOperations]()主要允许find,它返回一个MongoGridFSDBFile和storeGridFSDBFile()不允许更新内容。如果先删除文件,然后使用与上一个文件相同的\u id存储,理论上可以使用存储方法。但是sto

我在MongoDB GridFS中有一些数据。我正在使用Spring Data
GridFsOperations
类来执行我的GridFS读/写操作

我需要替换现有GridFS文件的内容,即
\u id
文件名应保持不变,但文件内容应更新

Spring数据
[GridFsOperations]
()主要允许
find
,它返回一个Mongo
GridFSDBFile
store
GridFSDBFile
()不允许更新内容。如果先删除文件,然后使用与上一个文件相同的
\u id
存储,理论上可以使用
存储方法。但是
store
不允许指定
\u id
字段


到目前为止,我找到的唯一解决方案是直接使用MongoAPI删除现有文件,并存储一个具有相同
\u id
的新文件。对这种效果的回答是没有用的:这个问题是专门针对Spring数据MongoDB的。

目前还没有公开API的原因是MongoDB GridFS上不支持API。您基本上解决了这个问题,实现了如下所述的模式。但由于这归结为一个非原子操作,我们决定首先不将其公开为操作


如果您认为这个模式有一个可靠的实现(加上对错误案例的适当处理),请随意打开我们的讨论窗口来讨论选项。

是的,这基本上就是我使用Mongo API所做的。我想说,Spring数据合理的第一步是允许
store
方法采用预先存在的_id值,这样用户至少可以通过Spring数据API在自己的代码中实现这两步模式。现在,我必须使用反射从
GridFsOperations
获取私有
GridFS
对象,然后直接使用它来创建新文件。