在MongoDB GridFSBucket(Java)上修改元数据

时间:2018-12-03 16:39:07

标签: java mongodb gridfs

我正在使用GridFS将文件添加到我的MongoDB数据库中。这些文件具有附加的元数据。我现在想修改其中一个文件的元数据。我正在使用版本3.9 Java驱动程序。

我正在使用GridFSBucket来访问GridFS集合。但是,GridFSBucket上的find()方法返回com.mongodb.client.gridfs.model.GridFSFile的实例-没有允许我更改元数据的设置方法。

我看到com.mongodb.gridfs.GridFSFile确实具有修改元数据的方法-但是要获取这些对象的实例,我将需要使用GridFS,这似乎不再被推荐。当然,GridFS 3.9版的文档依赖于使用GridFSBucket。

所以我的问题是:

  1. 我是否应该使用GridFSBucket(而不是GridFS)
  2. 然后如何在不诉诸于fs.files集合(感觉像作弊)的情况下访问和修改元数据。

FWIW,这是我的代码:

String id = "5c05278530a59030cc89fc2f";)   // hex id
com.mongodb.client.gridfs.model.GridFSFile file = gridFSBucket.find( eq( "_id", new ObjectId( id ) ) ).first();
Document d = file.getMetadata(); // No corresponding setMetadata()

2 个答案:

答案 0 :(得分:0)

您可以通过编写新版本并修改新版本中的元数据来对其进行修改。这能满足您的需求吗?

答案 1 :(得分:0)

我也遇到了这个问题。当前最新的驱动程序是3.11,发现有2种可能的操作要遵循:

  1. 您可以使用GridFSUploadOptions并上传您应得的文件。但是,这仅适用于初始情况,可能无法满足您的需求。

  2. 您可以使用com.mongodb.gridfs.GridFSFile setMetaData method。我知道这可能并不是您要找的,因为您喜欢使用新的驱动程序类/方法。

据我了解,mongodb drvier的开发人员试图消除用户与元数据的交互,以便在上载期间自动设置这些字段。

我希望这个答案能满足您的需求。