MongoDB Java驱动程序Jackson Mapper MongoJack

时间:2015-09-08 12:52:21

标签: java json mongodb

我希望找到最符合行业标准的方法来实现以下目标。 我正在编写一个Java应用程序来管理MongoDB中的文档。到目前为止我所阅读的所有内容都指向使用Mongo Java驱动程序(3.0)连接到数据库,然后使用Jackson Object Mapper将JSON映射到类以便于操作。 然后使用json.org:

JSONObject json = new JSONObject(mapper.writeValueAsString(user));

让它回到Mongo。

 Document doc1 = Document.parse(json.toString());
 collection.insertOne(doc1)

因此,对于新的3.0驱动程序,由于不再推荐使用DBObject,因此事情发生了一些变化。

那么从Mongo获取文档的最佳方法是编辑和更新它们然后保存更新的文档。

MongoCollection<Document> collection = database.getCollection("mycoll");

的作用:

MongoCollection<BasicDBObject> collection = database.getCollection("mycoll", BasicDBObject.class);

MongoCollection<MyObject> collection = database.getCollection("mycoll", MyObject.class);

MyObject功能是否消除了使用对象映射的需要?

正如你所看到的,我现在有点困惑,任何帮助理顺最好的是为Driver 3.0&gt;做这件事。会很棒的。

1 个答案:

答案 0 :(得分:0)

目前可用的最新MongoJack(自2015年11月起为2.5.1)仍然使用现已弃用的DBCollection(现在,从MongoDb驱动程序3.0开始)。

如果你愿意,你仍然可以这样做:

MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
DB db = mongoClient.getDB("databaseName");
DBCollection coll = db.getCollection("my.collection");
JacksonDBCollection<MyDomainObject, String> wrapped =
  JacksonDBCollection.wrap(coll, MyDomainObject.class, String.class);

在您的问题中,您提出了MongoDb驱动程序3.0的Codec注册表功能,并且基本上问,MongoJack是否仍然相关,因为本机驱动程序内置了此功能?

我还没有编写过编解码器,但它似乎需要一些相当数量的样板代码 - 与MongoJack的简单性相去甚远。请查看此blog post中的示例。

在我看来,MongoJack的新版本将利用驱动程序的Codec功能,并将它们抽象为MongoJack当前版本提供的简单内容。我在MongoJack github项目上发布了一个question