您好我需要将Mongo Document转换为DBObject(BasicDBObject)。
我正在使用GridFS将文件上传到mongo,我想设置元数据,这是我在文档中获得的。我知道Document与DBObject几乎相同。我知道我可以这样做:
Document doc = new Document();
BasicDBObject.parse(doc.toJson());
但这种不必要的表现是不是很重要?
gridFS方法setMetaData()
仅接受DBObject
,因此我必须将其转换。
是否有更好的方法可以将其转换为字符串并返回?
答案 0 :(得分:6)
你在这里进行微观优化。
但是,由于这两个类都是Map的实现,你可以这样做:
Document document = new Document();
BasicDBObject basicDBObject = new BasicDBObject(document);
在内部执行Map#putAll
操作,将Document文档的所有条目放入BasicDbObject映射中。
答案 1 :(得分:1)
我知道这是一个老问题,有一个可以接受的答案,但这是不正确的。
建议的答案只能在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());
}
}