sql >> Database >  >> NoSQL >> MongoDB

Java-syntaxis met MongoDB

Hoewel je zeker het formulier kunt gebruiken dat je hebt voorgesteld:

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

het introduceert een probleem wanneer de hoofdtekst van de for-lus een uitzondering genereert:als dit gebeurt, wordt de cursor niet gesloten. Het juiste idioom om daartegen te waken is om MongoCursor (die Closeable implementeert) expliciet te gebruiken:

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

De forEach-methode is slechts een beetje syntactische suiker om te voorkomen dat applicatiecode zich zorgen hoeft te maken over het handmatig sluiten van de cursor op deze manier.

Als u niet voor elke iteratie een nieuw blok wilt maken, kunt u uw code refactoren en de anonieme creatie van de innerlijke klasse verwijderen, bijvoorbeeld:

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

Dat is natuurlijk nog onhandiger, dus als je Java 8 kunt gebruiken, kun je het hele ding vervangen door een lambda:

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

of in dit geval gewoon:

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

De lambda-metafactory zorgt ervoor dat er geen onnodige objecten worden gemaakt.



  1. Numpy-array opslaan in mongodb

  2. Kunnen strikte JSON $dates worden gebruikt in een MongoDB-query?

  3. mongoexport JSON-parseerfout

  4. Docker-compose , toch om een ​​redis.conf-bestand op te geven?