【问题标题】:Java driver equivalent for JavaScript shell's Object.bsonsize( doc )?等效于 JavaScript shell 的 Object.bsonsize( doc ) 的 Java 驱动程序?
【发布时间】:2012-06-04 17:53:31
【问题描述】:

我想知道 Java 驱动程序等效于 Mongo JavaScript shell 的 Object.bsonsize( doc ) 方法是什么?例如,执行以下操作的 Java 代码是什么:

bobk-mbp:~ bobk$ mongo
MongoDB shell version: 2.0.4
connecting to: test
PRIMARY> use devices;
switched to db devices
PRIMARY> Object.bsonsize( db.profiles.findOne( { _id: "REK_0001" } ) );
186
PRIMARY> Object.bsonsize( db.profiles.findOne( { _id: "REK_0002" } ) );
218
PRIMARY> 

如何使用 MongoDB Java 驱动程序执行相同的基本用例。通过 JavaDocs 并不明显。

【问题讨论】:

    标签: mongodb mongodb-java


    【解决方案1】:

    没有什么比 shell 中可用的更干净了,但这会起作用:

    DBObject obj = coll.findOne();
    int bsonSize = DefaultDBEncoder.FACTORY.create().
            writeObject(new BasicOutputBuffer(), obj));
    

    【讨论】:

    • 哇。那是冗长的,我无法使用 Mongo 2.6.5 Java 驱动程序在我的 IDE 中解析任何 DefaultDBEncoder。必须编写文档来确定其大小也是不可取的。我的实际用例是在将文档提交到数据库之前尝试强制执行一些大小限制。无论如何,感谢您的回复,我会看看我是否可以从这里到达那里。
    【解决方案2】:

    你可以使用BasicBSONEncoder:

    DBObject obj = coll.findOne();
    int bsonSize = new BasicBSONEncoder().encode(obj).length;
    

    【讨论】:

      【解决方案3】:

      怎么样:

              CommandResult result = db.doEval("Object.bsonsize(db.profiles.findOne({ _id: "REK_0001" }))");
              double bsonSize = (Double) result.get("retval");
      

      它是 double 而不是 int。

      doEval 自第一个版本以来就是 MongoDB Java 驱动程序的一部分。

      【讨论】:

        猜你喜欢
        • 2016-07-10
        • 1970-01-01
        • 2013-08-21
        • 2012-04-11
        • 1970-01-01
        • 2010-11-29
        • 1970-01-01
        • 2011-06-23
        • 1970-01-01
        相关资源
        最近更新 更多