【问题标题】:Modify metadata on MongoDB GridFSBucket (Java)修改 MongoDB GridFSBucket (Java) 上的元数据
【发布时间】:2019-05-05 00:01:59
【问题描述】:

我正在使用 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()

【问题讨论】:

    标签: java mongodb gridfs


    【解决方案1】:

    我也遇到过这个问题。目前最新的驱动程序是3.11,并找到了 3 个可能的操作:

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

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

    3. 您可以将bucket.files 作为集合来修改元数据。

    MongoCollection<Document> gridFSFiles = mongoClient.getDatabase("dbName").getCollection("bucketName" + ".files");
    Document metadata = gridFSFiles.get("metadata", Document.class);
    // update metadata and update collection
    

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

    我希望这个答案能满足你的需要。

    【讨论】:

      【解决方案2】:

      您可以通过编写新版本来修改它,并在新版本中修改元数据。这能满足您的需要吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多