[英]How to convert a BasicDBObject to a Mongo Document with the Java Mongo DB driver version 3?
在Java Mongo DB驱动程序版本3中,与版本2相比,API已经发生了变化。因此像这样的代码不再编译:
BasicDBObject personObj = new BasicDBObject();
collection.insert(personObj)
Collection插件仅适用于Mongo Document。
处理旧代码我需要提出问题:
将BasicDBObject转换为Document的最佳方法是什么?
我认为最简单的方法就是更改代码以使用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
我们可以通过以下方式将BasicDBObject
转换为Document
public static Document getDocument(DBObject doc)
{
if(doc == null) return null;
return new Document(doc.toMap());
}
因为Document
本身是Map<String,Object>
。
和BasicDBObject
可太是渔获DBObject
作为BasicDBObject
是一个实现DBObject
。
@ Black_Rider也适合你
Document与BasicDBObject非常相似。 我不太确定你所指的是将BasicDBObjects转换为Documents的方法,但Document对象提供了一些非常有用的方法。
如果您在JSON字符串中提供Document.parse(string)将返回Document。
Document.append(“key”,Value)将添加到Document的字段中。
至于帖子中的代码,这应该用版本3编译:
Document personObj = new Document();
collection.insertOne(personObj)
看到
和
@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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.