java - MongoDB Java 驱动程序 : Convert BsonDocument to Document and back

标签 java mongodb mongodb-java

我正在为我的项目使用 MongoDB Java 驱动程序以从 Java 访问我的数据库。

我通常使用Document因为它非常易于使用,所有方法都在 MongoDBCollection 中,例如 find()使用它并返回 Document实例。

但是,在某些情况下我想使用等效的 BsonDocument这更冗长,但通过实现 Map<String,BsonValue> 提供类型安全,这Document没有,因为它实现了 Map<String,Object> .

我能够转换 Document进入 BsonDocument 有了这个:

BsonDocument bsonDoc = document.toBsonDocument(BsonDocument.class, MongoClient.getDefaultCodecRegistry());

这里的问题是,MongoDBCollection 中的所有方法, 比如 insertOne()只取Document实例,所以我不能使用这些。


对我来说,似乎有两种方法可以解决这个问题:

如果BsonDocument创建者 toBsonDocument()在某种程度上得到了原始 Document 的支持,我可以使用原来的 Document例如,即使我对 BsonDocument 进行了修改, 因为原来 Document会反射(reflect)这些变化,对吧? 它是这样工作的还是BsonDocument只是一个副本?

第二种方式是从 BsonDocument 转换返回Document 。这在某种程度上可能吗?


提前致谢!

最佳答案

假设您有一个 CodecRegistry 实例,您可以使用此适配器将 BsonDocument 转换为 Document,反之亦然:

public class DocumentAdapter {
    private final CodecRegistry registry;
    private final Codec<Document> codec;

    public DocumentAdapter(CodecRegistry registry) {
        this.registry = registry;
        this.codec = registry.get(Document.class);
    }

    public Document fromBson(BsonDocument bson) {
        return codec.decode(bson.asBsonReader(), DecoderContext.builder().build());
    }

    public BsonDocument toBson(Document document) {
        return document.toBsonDocument(BsonDocument.class, registry);
    }
}

关于java - MongoDB Java 驱动程序 : Convert BsonDocument to Document and back,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49262903/

相关文章:

java - 强制类型参数在java泛型中实现特定方法

mongodb - 如何检查MongoDB企业是否在使用

java - 在 Mongo 3.3.0 中使用 QueryBuilder 查询 Mongo 集合

java - 向我解释一下这些构造函数在这个程序中做了什么?

java - Spring 的 @Asyn 注释

mongodb - 即使使用 $addToSet,mongodb 中数组中的键重复项

node.js - Mongoose:在 ReplicaSet 上阅读

mongodb - 相当于 JavaScript shell 的 Object.bsonsize(doc) 的 Java 驱动程序?

mongodb - 在合理的时间内使用 mongoDB 检索大量记录

java.io.EOFException : Unexpected end of ZLIB input stream using Apache POI