sql >> Base de Datos >  >> NoSQL >> MongoDB

Sintaxis Java con MongoDB

Si bien puede usar el formulario que sugirió:

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

introduce un problema cuando el cuerpo del bucle for arroja una excepción:si esto sucede, el cursor no se cerrará. El idioma apropiado para protegerse contra eso es usar MongoCursor (que implementa Closeable) explícitamente:

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

El método forEach es solo un poco de azúcar sintáctico para evitar la necesidad de que el código de la aplicación se preocupe por tener que cerrar el cursor manualmente de esta manera.

Si no desea crear un nuevo bloque para cada iteración, puede refactorizar su código y extraer la creación de clase interna anónima, por ejemplo:

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

Por supuesto, eso es aún más complicado, por lo que si puede usar Java 8, puede reemplazarlo todo con una lambda:

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

o en este caso simplemente:

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

La metafábrica lambda se asegurará de que no se creen objetos innecesarios.