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 映射。
我知道这是一个老问题,有一个公认的答案,但它不正确。
建议的答案仅在 Document
和 DBOject
之间进行 浅 转换。如果您的 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());
}
}
您好,我需要将 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 映射。
我知道这是一个老问题,有一个公认的答案,但它不正确。
建议的答案仅在 Document
和 DBOject
之间进行 浅 转换。如果您的 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());
}
}