Mongo将Document转换为DBObject

时间:2017-09-13 07:55:23

标签: java mongodb gridfs

您好我需要将Mongo Document转换为DBObject(BasicDBObject)。

我正在使用GridFS将文件上传到mongo,我想设置元数据,这是我在文档中获得的。我知道Document与DBObject几乎相同。我知道我可以这样做:

Document doc = new Document();
BasicDBObject.parse(doc.toJson());

但这种不必要的表现是不是很重要?

gridFS方法setMetaData()仅接受DBObject,因此我必须将其转换。

是否有更好的方法可以将其转换为字符串并返回?

2 个答案:

答案 0 :(得分:6)

你在这里进行微观优化。

但是,由于这两个类都是Map的实现,你可以这样做:

Document document = new Document();
BasicDBObject basicDBObject = new BasicDBObject(document);

在内部执行Map#putAll操作,将Document文档的所有条目放入BasicDbObject映射中。

答案 1 :(得分:1)

我知道这是一个老问题,有一个可以接受的答案,但这是不正确的。

建议的答案只能在DocumentDBOject之间进行转换。如果您的Json对象包含嵌套对象或列表,则将无法正确转换它们。

我通过序列化为JSON字符串解决了这个问题。它根本没有效率,但是在大多数情况下可能就足够了,至少它是正确的:

public final class BsonConverter {
    public static Document toDocument(DBObject dbObject) {
        return Document.parse(dbObject.toString());
    }
    public static DBObject toDBObject(Document document) {
        return BasicDBObject.parse(document.toJson());
    }
}