【发布时间】:2018-03-13 18:01:47
【问题描述】:
我正在为我的项目使用 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 实例,所以我不能使用这些。
对我来说,似乎有两种方法可以解决这个问题:
如果toBsonDocument() 创建的BsonDocument 在某种程度上得到原始Document 的支持,即使我对BsonDocument 进行了修改,我也可以使用原始Document 实例,因为原始@987654341 @ 会反映这些变化,对吧?
它是这样工作的还是BsonDocument 只是一个副本?
第二种方法是从 BsonDocument 转换回 Document。这在某种程度上可能吗?
提前致谢!
【问题讨论】:
-
你在使用任何 ORM 吗?如果没有请查看Morphia:mongodb.github.io/morphia,不需要从BsonDocument来回切换
-
您是否尝试过将 BsonDocument 传递给 insertOne() ?它应该可以工作。
-
@dkb 谢谢!我会调查的!也许这会让整个事情变得更容易。
-
@Veeram 根据您的评论,我发现还有另一个
getCollection可以用来获取集合实例中的其他类型的文档。我会调查一下,看看我能不能让它工作!
标签: java mongodb mongodb-java