Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java MongoDb驱动程序实现漂亮打印_Java_Mongodb_Bson_Mongo Java_Mongo Java Driver - Fatal编程技术网

使用Java MongoDb驱动程序实现漂亮打印

使用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(/*

我使用的是使用Java MongoDB驱动程序版本3.3的Mongo聚合框架。我有一个聚合管道,它仅仅是类型
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());