MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Синтаксис на Java с MongoDB

Въпреки че със сигурност можете да използвате формуляра, който предложихте:

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

той въвежда проблем, когато тялото на цикъла for хвърля изключение:ако това се случи, курсорът няма да бъде затворен. Правилният идиом за предпазване от това е да се използва изрично MongoCursor (който имплементира Closeable):

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

Методът forEach е само малко синтактична захар, за да се избегне необходимостта кодът на приложението да се тревожи, че трябва да затваря курсора ръчно по този начин.

Ако не искате да създавате нов блок за всяка итерация, можете да преработите кода си, като изтеглите анонимното създаване на вътрешен клас, напр.:

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

Разбира се, това е още по-тромаво, така че ако можете да използвате Java 8, можете да замените цялото нещо с ламбда:

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

или в този случай просто:

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

Ламбда метафабриката ще гарантира, че не се създават ненужни обекти.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да намерите документи, отговарящи на множество критерии

  2. Google Cloud Mongo DB:Външният IP не се свързва

  3. Получаване на времева марка от mongodb id

  4. Как да използвате MongoDB Connection Pooling на AWS Lambda

  5. Заявката за дата с ISODate в mongodb изглежда не работи