将Mongo文档转换为DBObject

8

您好,我需要将Mongo文档转换为DBObject(BasicDBObject)。

我正在使用GridFS将文件上传到Mongo,并且我想设置元数据,这些元数据我可以在文档中获取。我知道Document与DBObject基本相同。我知道我可以像这样做:

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

但这是否会造成不必要的性能压力?

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

有没有更好的方法来完成这个过程,而不是将其转换为字符串再转回去?


这难道不会使性能过重吗?你为什么这样认为? - Naman
这实际上有点奇怪,似乎更像是一种疏忽,没有更新此处的类型。然而,简单的答案当然就是它只是一个Map,并且像任何其他Map一样运作。 - Neil Lunn
好吧,也许它不会影响性能,但对我来说,将其转换为字符串然后再转回去似乎毫无意义。 - František Jeřábek
如果您有嵌入式文档,这是唯一可行的方法。接受的答案不起作用。 - zendu
2个回答

13

你在这里进行了微小的优化。

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

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

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


8

我知道这是一个老问题,并且有一个已接受的答案,但那不正确。

所提出的答案只对 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());
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接