sql >> Databáze >  >> NoSQL >> MongoDB

Syntaxe Java s MongoDB

I když určitě můžete použít formulář, který jste navrhli:

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

zavádí problém, když tělo cyklu for vyvolá výjimku:pokud k tomu dojde, kurzor se nezavře. Správný idiom, proti kterému se lze chránit, je explicitně použít MongoCursor (který implementuje Closeable):

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

Metoda forEach je jen trochou syntaktického cukru, aby se kód aplikace nemusel obávat, že bude muset kurzor ručně zavírat, jako je tento.

Pokud nechcete pro každou iteraci vytvářet nový blok, můžete svůj kód přefaktorovat a vytáhnout anonymní vytvoření vnitřní třídy, např.:

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

To je samozřejmě ještě neohrabanější, takže pokud jste schopni používat Java 8, můžete to celé nahradit lambdou:

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

nebo v tomto případě jednoduše:

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

Metafactory lambda zajistí, že nebudou vytvářeny žádné zbytečné objekty.



  1. nastavit expiraci pro hodnoty Hashmap v Redis?

  2. Jak uložit pole objektů v Redis?

  3. Jaká je výchozí cesta k databázi pro MongoDB?

  4. Jak provést addToSet pomocí oficiálního ovladače Go?