我想更新GrifFs文件集合中的单个元数据字段。
我阅读了有关Spring Data MongoDB的文档,但没有找到任何API。
到目前为止,我找到的唯一解决方案是直接使用Mongo API删除现有文件,并存储一个具有相同_id
的新文件。但这不是有效的解决方案。该问题特定于Spring Data MongoDB。任何替代方案?
答案 0 :(得分:4)
使用mongoOperations。
元数据存储在集合fs.files中;如果您只是更新元数据,可以直接使用集合来访问它并更新它:
DBObject yourObjectWithMetadata = mongoOperations.getCollection("fs.files").findOne(<Object Id>);
mongoOperations.getCollection("fs.files").save(<your db object with updated metadata>);
答案 1 :(得分:4)
添加或完全替换元数据字段的另一种解决方案。
Map<String,Object> fields=...;
替换元数据:
List<GridFSDBFile> files = gfs.find(query);
for (GridFSDBFile file : files) {
file.setMetaData(new BasicDBObject(fields));
file.save();
}
添加元数据:
List<GridFSDBFile> files = gfs.find(query);
for (GridFSDBFile file : files) {
if (file.getMetaData() == null)
file.setMetaData(new BasicDBObject(fields));
else
file.getMetaData().putAll(fields);
file.save();
}