Pude encontrar alguna solución usando bson4jackson:
public static InputStream documentToInputStream(final Document document) {
BasicOutputBuffer outputBuffer = new BasicOutputBuffer();
BsonBinaryWriter writer = new BsonBinaryWriter(outputBuffer);
new DocumentCodec().encode(writer, document, EncoderContext.builder().isEncodingCollectibleDocument(true).build());
return new ByteArrayInputStream(outputBuffer.toByteArray());
}
public static JsonNode documentToJsonNode(final Document document) throws IOException {
ObjectMapper mapper = new ObjectMapper(new BsonFactory());
InputStream is = documentToInputStream(document);
return mapper.readTree(is);
}
No estoy seguro de si esta es la forma más eficiente, supongo que sigue siendo una mejor solución que convertir BSOn a String y analizar esa cadena. Hay un ticket abierto en mongoDB JIRA para agregar conversión desde Document, DBObject y BsonDocumento a aBson y viceversa, lo que simplificaría mucho todo el proceso.