【问题标题】:Mongo convert Document to DBObjectMongo 将 Document 转换为 DBObject
【发布时间】:2018-02-21 20:01:42
【问题描述】:

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

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

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

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

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

有没有更好的方法来做到这一点,而不是将其转换为字符串并返回?

【问题讨论】:

  • 这不是不必要的性能沉重你为什么这么认为?
  • 这实际上有点奇怪,而且似乎更多的是疏忽了这里没有更新类型。然而,简单的答案当然是它只是一个Map,因此其行为与其他任何行为一样。
  • 好吧,也许它的性能并不重,但至少对我来说将它转换为字符串蚂蚁而不是转换回来似乎毫无意义。
  • 如果您有嵌入的文档,这是唯一可行的方法。接受的答案将不起作用。

标签: java mongodb gridfs


【解决方案1】:

您在这里进行了微优化。

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-28
      • 1970-01-01
      • 2015-10-01
      • 1970-01-01
      相关资源
      最近更新 更多