MongoDB Java 驱动程序:将 BsonDocument 转换为 Document 并返回

fus*_*cat 6 java mongodb mongodb-java

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

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

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

我可以将 a 转换Document为 aBsonDocument

BsonDocument bsonDoc = document.toBsonDocument(BsonDocument.class, MongoClient.getDefaultCodecRegistry());
Run Code Online (Sandbox Code Playgroud)

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


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

如果BsonDocumentcreated bytoBsonDocument()以某种方式得到了原始 的支持,即使我对 进行了修改Document,我也可以使用原始Document实例BsonDocument,因为原始实例Document会反映这些更改,对吗?它是这样工作的还是BsonDocument只是一个副本?

第二种方法是从BsonDocumentDocument转换. 这在某种程度上可能吗?


提前致谢!

Den*_*ich 8

假设您有 的实例CodecRegistry,您可以使用此适配器进行转换BsonDocumentDocument反之亦然:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)