代码之家  ›  专栏  ›  技术社区  ›  FrantiÅ¡ek Jeřábek

Mongo将文档转换为DBObject

  •  7
  • FrantiÅ¡ek Jeřábek  · 技术社区  · 8 年前

    我正在使用GridFS将一个文件上传到mongo,我想设置元数据,这是我在文档中得到的。我知道Document和DBObject非常相似。我知道我可以这样做:

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

    但是,这难道不是不必要的高性能吗?

    setMetaData() DBObject 所以我必须转换它。

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

    2 回复  |  直到 8 年前
        1
  •  11
  •   Luciano van der Veekens    8 年前

    但是,由于这两个类都是Map的实现,您可以只执行以下操作:

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

    在内部,这是一个 Map#putAll 将文档映射的所有条目放入基本对象映射的操作。

        2
  •  8
  •   phoenix7360    6 年前

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

    浅的 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());
        }
    }