Есть ли способ конвертировать FindIterable <Document>в строку JSONArray? - PullRequest
0 голосов
/ 04 сентября 2018

Я получил что-то вроде этого

MongoClient mongoClient = new MongoClient();
MongoDatabase database = mongoClient.getDatabase(db);
MongoCollection<Document> collection = database.getCollection(col);

FindIterable<Document> results = collection.find();

Я могу получить строку JSONArray, используя:

JSON.serialize(results)

но не рекомендуется в последней версии драйвера mongodb.

А в оболочке MongoDB я могу использовать:

db.$.find().toArray();

Но я не нашел ничего подобного в драйвере для Java.

Я решил использовать List и перебирать курсор.

MongoCursor<Document> cursor = results.iterator();
List<String> list = new ArrayList<String>(); 

while(cursor.hasNext())
    list.add(cursor.next().toJson());

return list.toString();

Не стесняйтесь предлагать лучшее решение в любом случае.

1 Ответ

0 голосов
/ 06 сентября 2018

Используйте spliterator () для итерируемого поиска, затем стримируйте, сопоставьте со строкой и соберите:

StreamSupport.stream(collection.find().spliterator(), false)
        .map(Document::toJson)
        .collect(Collectors.joining(", ", "[", "]"))

Обратите внимание, что параллельная потоковая передача не будет работать на монго, поэтому оставьте флаг parallel на false.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...