Bson pretty print using Java MongoDb 驱动程序
Bson pretty print using Java MongoDb driver
我正在使用 Mongo 聚合框架,使用 Java MongoDB 驱动程序 3.3 版。我有一个 聚合管道 ,它只是 List<Bson>
类型的集合。我正在尝试找到一种方法来漂亮地打印管道的每个阶段。
在每个元素上调用 toString
方法是不够的,因为每个阶段都是 Bson
接口的简单实现的实例,即 SimplePipelineStage
。这个愚蠢的 class 没有覆盖 toString
方法。
管道是使用 mongo java 驱动程序 Aggregates
class 的工厂方法创建的,如下所示:
Aggregates.match(/* ... */)
Aggregates.project(/* ... */)
// And so on...
Java可以找到文档 here.
如何漂亮地打印这些对象?我确定 BasicDbObject
类型有一个智能的 toString
实现,但我找不到从 Bson
转换为 BasicDbObject
.
的方法
非常感谢。
谷歌搜索有点困难,我找到了一个漂亮打印 Bson
实例的解决方案。诀窍是将其转换为 BsonDocument
的实例,该实例具有 toString
方法的实现,即 returns 对应 JSON.[=15= 的字符串表示形式]
Bson bson = Filters.gt("a", 10);
BsonDocument bsonDocument = bson.toBsonDocument(BsonDocument.class, MongoClient.DEFAULT_CODEC_REGISTRY);
System.out.println(bsonDocument);
原文link如下:Converting Bson object to BsonDocument.
对于mongodb-java API 3.4,常量MongoClient.DEFAULT_CODEC_REGISTRY
不能直接访问,它是一个私有成员。有一个静态方法 CodecRegistry getDefaultCodecRegistry()
其中 returns 相同的常量。
还有一点,BsonDocument.toString()
在内部做了一个 toJson()
,默认为 JsonWriterSettings
。为了查看 Query 的 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 driver pretty print" 时最相关的 post :
BsonDocument bsonDocument = bson.toBsonDocument(BsonDocument.class, MongoClient.getDefaultCodecRegistry());
JsonWriterSettings.Builder settingsBuilder = JsonWriterSettings.builder().indent(true);
System.out.println(bsonDocument.toJson(settingsBuilder.build());
使用 mongo 4 驱动程序,它看起来像这样:
private String pretty(Document document) {
var settings = JsonWriterSettings.builder()
.indent(true)
.outputMode(JsonMode.SHELL)
.build();
return document.toJson(settings);
}
我正在使用 Mongo 聚合框架,使用 Java MongoDB 驱动程序 3.3 版。我有一个 聚合管道 ,它只是 List<Bson>
类型的集合。我正在尝试找到一种方法来漂亮地打印管道的每个阶段。
在每个元素上调用 toString
方法是不够的,因为每个阶段都是 Bson
接口的简单实现的实例,即 SimplePipelineStage
。这个愚蠢的 class 没有覆盖 toString
方法。
管道是使用 mongo java 驱动程序 Aggregates
class 的工厂方法创建的,如下所示:
Aggregates.match(/* ... */)
Aggregates.project(/* ... */)
// And so on...
Java可以找到文档 here.
如何漂亮地打印这些对象?我确定 BasicDbObject
类型有一个智能的 toString
实现,但我找不到从 Bson
转换为 BasicDbObject
.
非常感谢。
谷歌搜索有点困难,我找到了一个漂亮打印 Bson
实例的解决方案。诀窍是将其转换为 BsonDocument
的实例,该实例具有 toString
方法的实现,即 returns 对应 JSON.[=15= 的字符串表示形式]
Bson bson = Filters.gt("a", 10);
BsonDocument bsonDocument = bson.toBsonDocument(BsonDocument.class, MongoClient.DEFAULT_CODEC_REGISTRY);
System.out.println(bsonDocument);
原文link如下:Converting Bson object to BsonDocument.
对于mongodb-java API 3.4,常量MongoClient.DEFAULT_CODEC_REGISTRY
不能直接访问,它是一个私有成员。有一个静态方法 CodecRegistry getDefaultCodecRegistry()
其中 returns 相同的常量。
还有一点,BsonDocument.toString()
在内部做了一个 toJson()
,默认为 JsonWriterSettings
。为了查看 Query 的 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 driver pretty print" 时最相关的 post :
BsonDocument bsonDocument = bson.toBsonDocument(BsonDocument.class, MongoClient.getDefaultCodecRegistry());
JsonWriterSettings.Builder settingsBuilder = JsonWriterSettings.builder().indent(true);
System.out.println(bsonDocument.toJson(settingsBuilder.build());
使用 mongo 4 驱动程序,它看起来像这样:
private String pretty(Document document) {
var settings = JsonWriterSettings.builder()
.indent(true)
.outputMode(JsonMode.SHELL)
.build();
return document.toJson(settings);
}