Udało mi się znaleźć rozwiązanie za pomocą 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);
}
Nie jestem pewien, czy jest to najbardziej wydajny sposób, zakładam, że jest to nadal lepsze rozwiązanie niż konwersja BSOn na String i parsowanie tego ciągu. Istnieje otwarty bilet w mongoDB JIRA do dodawania konwersji z Dokumentu, DBObject i BsonDocument do do Bsona i na odwrót, co znacznie uprościłoby cały proces.