如何使用Java Mongo DB驱动程序版本3将BasicDBObject转换为Mongo文档?

Ale*_*lex 10 java mongodb

在Java Mongo DB驱动程序版本3中,与版本2相比,API已经发生了变化.因此像这样的代码不再编译:

BasicDBObject personObj = new BasicDBObject();
collection.insert(personObj) 
Run Code Online (Sandbox Code Playgroud)

Collection插件仅适用于Mongo Document.

处理旧代码我需要提出问题:

将BasicDBObject转换为Document的最佳方法是什么?

小智 9

我们可以通过以下方式转换BasicDBObjectDocument

public static Document getDocument(DBObject doc)
{
   if(doc == null) return null;
   return new Document(doc.toMap());
}
Run Code Online (Sandbox Code Playgroud)

作为Document本身就是一个实现Map<String,Object>.

并且BasicDBObject可以DBObjectBasicDBObject实施一样被捕获DBObject.

@ Black_Rider也适合你


小智 8

我认为最简单的方法就是更改代码以使用Document而不是BasicDBObject.

所以改变

BasicDBObject doc = new BasicDBObject("name", "john")
    .append("age", 35)
    .append("kids", kids)
    .append("info", new BasicDBObject("email", "john@mail.com")
    .append("phone", "876-134-667"));
Run Code Online (Sandbox Code Playgroud)

import org.bson.Document;
...
Document doc = new Document("name", "john")
    .append("age", 35)
    .append("kids", kids)
    .append("info", new BasicDBObject("email", "john@mail.com")
    .append("phone", "876-134-667"));
Run Code Online (Sandbox Code Playgroud)

然后插入集合中

coll.insertOne(doc);
Run Code Online (Sandbox Code Playgroud)

您需要更改其他代码才能使用MongoDB 3+

MongoDatabase与DB MongoCollection对比DBCollection


dbe*_*son 3

该文档与 BasicDBObject 非常相似。我不太确定您所说的将 BasicDBObjects 转换为文档的方法是什么,但 Document 对象提供了一些非常有用的方法。

如果您输入 JSON 字符串,Document.parse(string) 将返回一个 Document。

Document.append("key", Value) 将添加到文档的字段中。

至于您帖子中的代码,应该使用版本 3 进行编译:

Document personObj = new Document();
collection.insertOne(personObj) 
Run Code Online (Sandbox Code Playgroud)

Java 驱动程序 3.0 指南

MongoDB Java 驱动程序 3.0 文档