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

Java-syntaks med MongoDB

Selvom du helt sikkert kan bruge den formular, du foreslog:

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

det introducerer et problem, når kroppen af ​​for-løkken kaster en undtagelse:hvis dette sker, vil markøren ikke blive lukket. Det rigtige formsprog at beskytte sig imod er at bruge MongoCursor (som implementerer Closeable) eksplicit:

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

ForEach-metoden er bare en smule syntaktisk sukker for at undgå behovet for applikationskode for at bekymre sig om at skulle lukke markøren manuelt på denne måde.

Hvis du ikke ønsker at oprette en ny blok for hver iteration, kan du refaktorisere din kode og trække den anonyme indre klasseoprettelse ud, f.eks.:

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

Det er selvfølgelig endnu mere klodset, så hvis du er i stand til at bruge Java 8, kan du erstatte det hele med en lambda:

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

eller i dette tilfælde blot:

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

Lambda metafactory vil sikre, at der ikke oprettes unødvendige objekter.



  1. Er det muligt at have en Linux VFS-cache med et FUSE-filsystem?

  2. Hvordan udskriver man mere end 20 elementer (dokumenter) i MongoDBs shell?

  3. Kan ikke oprette et fungerende meteor.js-projekt på en omstrejfende boks

  4. Hvad er den anbefalede tilgang til databaser med flere lejere i MongoDB?