Проще говоря, просто верните MongoCursor
, вызвав iterator()
"один раз", потому что это все, что вам нужно сделать.
Затем очень просто создайте свой дескриптор файла "вне" цикла,Единственное, что действительно принадлежит «внутри» цикла - это фактическая итерация и запись курсора.
try {
MongoCursor<Document> cursor = collection.find().iterator();
String path = "./outputData.txt";
PrintWriter out = new PrintWriter(
new BufferedWriter(new FileWriter(path, true))
);
while(cursor.hasNext()){
out.println(cursor.next().toJson());
}
out.flush(); // flush to ensure writes
out.close(); // close the handle when done
} catch (IOException e) {
System.out.println("Error writing to file.");
}
Как только вы закончите с курсором, просто закройте возвращенный дескриптор файла.
Всевам действительно нужно знать, что вы не «создаете» файловый дескриптор и не продолжаете открывать «внутри» цикла.Это то, что вы делаете один раз, а затем просто «записываете» любым способом для каждой итерации.
В качестве полного списка вы можете запустить код, аналогичный перечисленному для локальной MongoDB.на порт по умолчанию без аутентификации.При необходимости добавьте параметры для изменения, но это «базовый» код, необходимый
import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
public class Application {
public static void main(String[] args) {
PrintWriter out = null;
MongoClient mongoClient = null;
try {
mongoClient = new MongoClient();
MongoDatabase db = mongoClient.getDatabase("test");
MongoCollection<Document> collection = db.getCollection("sample");
out = new PrintWriter(
new BufferedWriter(new FileWriter("output.txt"))
);
// Clear collection and insert data
collection.deleteMany(new Document());
collection.insertMany(Arrays.asList(
new Document("a", 1),
new Document("a", 2),
new Document("a", 3)
));
MongoCursor<Document> cursor = collection.find().iterator();
while ( cursor.hasNext() ) {
out.println(cursor.next().toJson());
//System.out.println(cursor.next().toJson());
}
out.flush();
} catch(Exception e) {
System.out.println(e.getMessage());
} finally {
if (out != null) {
out.close();
}
if (mongoClient != null) {
mongoClient.close();
}
}
}
}
Создает новый файл при каждом запуске и выводит документы, которые вставляются в коллекцию.
Дает вам файл с чем-то вроде этого:
{ "_id" : { "$oid" : "5b0bd9576a6bfa1f30e6c320" }, "a" : 1 }
{ "_id" : { "$oid" : "5b0bd9576a6bfa1f30e6c321" }, "a" : 2 }
{ "_id" : { "$oid" : "5b0bd9576a6bfa1f30e6c322" }, "a" : 3 }