在Java Mongo数据库驱动程序版本3中,API与版本2相比已经发生了变化。因此像这样的代码不再编译:
BasicDBObject personObj = new BasicDBObject();
collection.insert(personObj)
集合插件仅适用于Mongo文档。
处理旧代码我需要提出问题:
将BasicDBObject转换为Document的最佳方法是什么?
答案 0 :(得分:7)
我认为最简单的方法就是更改代码以使用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"));
要
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"));
然后插入集合
coll.insertOne(doc);
您需要更改其他代码才能使用MongoDB 3 +
MongoDatabase与DB MongoCollection与DBCollection
答案 1 :(得分:6)
我们可以转换 BasicDBObject
通过以下方式 Document
public static Document getDocument(DBObject doc)
{
if(doc == null) return null;
return new Document(doc.toMap());
}
Document
本身是 Map<String,Object>
的实现。
BasicDBObject
DBObject
是[{1}}的实现,因此BasicDBObject
中的和DBObject
也可能被捕获。
@ Black_Rider也是
答案 2 :(得分:2)
Document与BasicDBObject非常相似。我不太确定你所指的是将BasicDBObjects转换为Documents的方法,但是Document对象提供了一些非常有用的方法。
如果您使用JSON字符串提供文档,则Document.parse(string)将返回Document。
Document.append(&#34; key&#34;,Value)将添加到Document的字段中。
至于你帖子中的代码,这应该用版本3编译:
Document personObj = new Document();
collection.insertOne(personObj)
见
和
答案 3 :(得分:1)
@SuppressWarnings("unchecked")
public static Document getDocument(BasicDBObject doc)
{
if(doc == null) return null;
Map<String, Object> originalMap = doc.toMap();
Map<String, Object> resultMap = new HashMap<>(doc.size());
for(Entry<String, Object> entry : originalMap.entrySet())
{
String key = entry.getKey();
Object value = entry.getValue();
if(value == null)
{
continue;
}
if(value instanceof BasicDBObject)
{
value = getDocument((BasicDBObject)value);
}
if(value instanceof List<?>)
{
List<?> list = (List<?>) value;
if(list.size() > 0)
{
// check instance of first element
Object firstElement = list.get(0);
if(firstElement instanceof BasicDBObject)
{
List<Document> resultList = new ArrayList<>(list.size());
for(Object listElement : list)
{
resultList.add(getDocument((BasicDBObject)listElement));
}
value = resultList;
}
else
{
value = list;
}
}
}
resultMap.put(key, value);
}
Document result = new Document(resultMap);
return result;
}