Mongo 将文档转换为 DBObject

Mongo convert Document to DBObject

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

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

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

但这不是不必要的性能负担吗?

gridFS 方法 setMetaData() 只接受 DBObject 所以我必须转换它。

有没有比将其转换为字符串再返回更好的方法?

您在这里进行了微观优化。

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

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

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

我知道这是一个老问题,有一个公认的答案,但它不正确。

建议的答案仅在 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());
    }
}