使用Spring Data MongoDB更新GridFS元数据

时间:2014-03-21 11:10:17

标签: gridfs spring-data-mongodb

我想更新GrifFs文件集合中的单个元数据字段。

我阅读了有关Spring Data MongoDB的文档,但没有找到任何API。

到目前为止,我找到的唯一解决方案是直接使用Mongo API删除现有文件,并存储一个具有相同_id的新文件。但这不是有效的解决方案。该问题特定于Spring Data MongoDB。任何替代方案?

2 个答案:

答案 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();
        }