MongoDB将文档转换为自定义类型

时间:2016-08-12 19:33:40

标签: java mongodb serialization deserialization mongodb-java

有没有办法从MongoDB值读取我的类型的对象,而不是从SimpleDBObject转换它们?

我试图通过coll.find()从集合中获取所有文档,但是当我遍历它们时,我得到了

  

无法找到com.mynamespace.models.interfaces.Profile接口的编解码器。

正确的方法是什么?我使用标准的Java驱动程序。

据我记得在C#和Couchbase中,我只是在自定义类型中编写/读取文档。这是什么方式?

3 个答案:

答案 0 :(得分:0)

我过去使用过的东西是Mongo Jack。这提供了一个简单的包装器,根据他们的文档,它直接映射来自Mongo流的POJO,而不需要中间的SimpleDBObject。这也使用了Jackson库,因此您可以使用Jackson序列化和反序列化注释。

这就是网站所说的:

  

直接从MongoDB流中反序列化查询对象,使其成为MongoDB的最快(如果不是)最快的对象映射器之一。

也许这就是你要找的,是吗?

以下是网站上的示例:

JacksonDBCollection<MyObject, String> coll = JacksonDBCollection.wrap(dbCollection, MyObject.class,
        String.class);
MyObject myObject = ...
WriteResult<MyObject, String> result = coll.insert(myObject);
String id = result.getSavedId();
MyObject savedObject = coll.findOneById(id);

答案 1 :(得分:0)

mongo-java-driver&gt; = 3.0中的新Codec基础设施几乎可以满足您的需求。您必须手动创建编解码器,但create codecs automatically也做了一些努力。

还有其他成熟的ODM框架,如Morphia和Spring Data MongoDB。

答案 2 :(得分:0)

Morphia是官方支持的MongoDB和Java ODM。可以为Java对象编写自定义编解码器,以便序列化对您的应用程序基本上是透明的。 Spring数据和mongojack也是不错的选择。虽然我并不完全确定如今开发的mongojack是如何开发的,但Spring数据仍在积极维护。