我正在为我的项目使用 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/