繁体   English   中英

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

[英]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) 

看到

Java Driver 3.0指南

MongoDB Java Driver 3.0文档

@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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM