MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Sintassi Java con MongoDB

Mentre puoi sicuramente utilizzare il modulo che hai suggerito:

for (Document document : col.find()) {
    // do something
}

introduce un problema quando il corpo del ciclo for genera un'eccezione:se ciò accade il cursore non verrà chiuso. L'idioma corretto contro questo è usare MongoCursor (che implementa Closeable) in modo esplicito:

try (MongoCursor<Document> cursor = col.find().iterator()) {
    while (cursor.hasNext()) {
        System.out.println(cursor.next());
    }
}

Il metodo forEach è solo un po' di zucchero sintattico per evitare che il codice dell'applicazione si preoccupi di dover chiudere il cursore manualmente in questo modo.

Se non vuoi creare un nuovo blocco per ogni iterazione, puoi rifattorizzare il tuo codice estraendo la creazione di una classe interna anonima, ad esempio:

Block<Document> block = new Block<Document>() {
    @Override
    public void apply(final Document document) {
        System.out.println(document);
    }
};
col.find().forEach(block);

Ovviamente è ancora più ingombrante, quindi se sei in grado di utilizzare Java 8, puoi sostituire il tutto con una lambda:

col.find().forEach((Block<Document>) document -> {
    System.out.println(document);
});

o in questo caso semplicemente:

col.find().forEach((Block<Document>) System.out::println);

La metafactory lambda assicurerà che non vengano creati oggetti non necessari.