sql >> データベース >  >> NoSQL >> MongoDB

MongoDBを使用したJava構文

    あなたが提案したフォームを確かに使うことができますが:

    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. MongoDB $ currentDate

    2. SQLで文字列と数値を連結する

    3. Redisにデータベースを1つだけ保存するにはどうすればよいですか?

    4. サーバー127.0.0.1:27017に接続できませんでした