Java driver equivalent for JavaScript shell's

2019-05-27 12:01发布

I was wondering what the Java driver's equivalent to the Mongo JavaScript shell's Object.bsonsize( doc ) method? For example, what is the Java code to perform the following:

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> 

How do I perform this same basic use case with the MongoDB Java Driver. Its not obvious through the JavaDocs.

3条回答
甜甜的少女心
2楼-- · 2019-05-27 12:35

You can use BasicBSONEncoder:

DBObject obj = coll.findOne();
int bsonSize = new BasicBSONEncoder().encode(obj).length;
查看更多
何必那么认真
3楼-- · 2019-05-27 12:36

What about:

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

It's double instead of int.

doEval is part of the MongoDB Java Driver since the first version.

查看更多
聊天终结者
4楼-- · 2019-05-27 12:39

There's nothing quite as clean as what's available in the shell, but this will work:

DBObject obj = coll.findOne();
int bsonSize = DefaultDBEncoder.FACTORY.create().
        writeObject(new BasicOutputBuffer(), obj));
查看更多
登录 后发表回答