使用Java MongoDb驱动程序实现漂亮打印
我使用的是使用Java MongoDB驱动程序版本3.3的Mongo聚合框架。我有一个聚合管道,它仅仅是类型使用Java MongoDb驱动程序实现漂亮打印,java,mongodb,bson,mongo-java,mongo-java-driver,Java,Mongodb,Bson,Mongo Java,Mongo Java Driver,我使用的是使用Java MongoDB驱动程序版本3.3的Mongo聚合框架。我有一个聚合管道,它仅仅是类型List的集合。我正试图找到一种方法,漂亮地打印管道的每个阶段 在每个元素上调用toString方法是不够的,因为每个阶段都是Bson接口的简单实现的一个实例,该接口是simplePliepEstate。这个愚蠢的类没有对toString方法的任何重写 管道是使用mongo java驱动程序Aggregatesclass的工厂方法创建的,如下所示: Aggregates.match(/*
List
的集合。我正试图找到一种方法,漂亮地打印管道的每个阶段
在每个元素上调用toString
方法是不够的,因为每个阶段都是Bson
接口的简单实现的一个实例,该接口是simplePliepEstate
。这个愚蠢的类没有对toString
方法的任何重写
管道是使用mongo java驱动程序Aggregates
class的工厂方法创建的,如下所示:
Aggregates.match(/* ... */)
Aggregates.project(/* ... */)
// And so on...
可以找到Javadoc
我怎样才能漂亮地打印这样的对象?我确信类型BasicDbObject
具有智能toString
实现,但我找不到从Bson
转换到BasicDbObject
的方法
提前非常感谢。通过谷歌搜索,我找到了一个解决方案,可以漂亮地打印一个
Bson
实例。诀窍是将其转换为BsonDocument
的实例,该实例实现了toString
方法,该方法返回相应JSON的字符串表示形式
Bson bson = Filters.gt("a", 10);
BsonDocument bsonDocument = bson.toBsonDocument(BsonDocument.class, MongoClient.DEFAULT_CODEC_REGISTRY);
System.out.println(bsonDocument);
原始链接如下:.对于mongodb java API 3.4,常量
MongoClient.DEFAULT\u CODEC\u注册表
不再可以直接访问,它是一个私有成员。有一个静态方法coderegistry getDefaultcoderegistry()
,它返回相同的常量
另一点是,BsonDocument.toString()
使用默认的JsonWriterSettings
在内部执行toJson()
。要查看与查询等价的Shell,请按如下方式使用它:
public void logQuery(Bson filter) {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug(
"filter query: " + filter.toBsonDocument(BsonDocument.class, MongoClient.getDefaultCodecRegistry())
.toJson(new JsonWriterSettings(JsonMode.SHELL)));
}
}
这是一个相当老的问题,但是我把我的建议(针对mongodb驱动程序3.6.4)放在这里,因为这是谷歌搜索“mongodb java驱动程序漂亮打印”时最相关的帖子:
.toJson()
它实际上是一个方法toJson
不是在Bson
类型上定义的。请阅读问题,首先抱歉想到的是文档
,无论如何你都应该使用它。我个人通过Gson进行泵管道调试。所以我可以在某处找到一个代码块。我正在使用Aggregates
factory方法来创建每个管道。我不选择使用抽象的Bson
:)您能展示一下构建管道的实际代码吗。准确地查看您正在使用的内容将非常有用,这样您就可以被指向正确的位置。
BsonDocument bsonDocument = bson.toBsonDocument(BsonDocument.class, MongoClient.getDefaultCodecRegistry());
JsonWriterSettings.Builder settingsBuilder = JsonWriterSettings.builder().indent(true);
System.out.println(bsonDocument.toJson(settingsBuilder.build());