2016-08-12 86 views
1

是否有某种方法可以从MongoDB值读取我的类型对象,而无需将它们从SimpleDBObject转换为对象?MongoDB将文档转换为自定义类型

我试图让所有的文件从收集与coll.find()但是当我遍历它们,我得到

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

什么是正确的方法?我使用标准的Java驱动程序。据我所知在C#和Couchbase中,我只是将文档写入/读取到自定义类型中。这里有什么方法?

回答

0

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

这是网站这样说:

Deserialises直接从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); 
+0

是的,这样的事情。那么,我说的没有像Mongo + Java组合中的直接序列化/反序列化吗?没有第三方库我的意思是 – ArkadyB

+0

@ArkadyB根据网站上的描述,他们直接从Mongo流反序列化,从网站:“Deserialises直接从MongoDB流中查询对象,使其成为一个(如果不是)最快的MongoDB对象映射器“ - Mongo Jack网站 – Himself12794

+0

@ArkadyB是的,我在我的答案中包含了一个,但如果你想要更多,你可能想试试[tutorial](http://mongojack.org /tutorial.html)。 – Himself12794

0

在蒙戈-Java的应用程序的新Codec基础设施> = 3.0几乎你想要做什么。您必须手动创建编解码器,但也有一些努力create codecs automatically

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

0

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