web-dev-qa-db-ja.com

mongodb Javaドライバで検索した後にカウント操作を呼び出す方法

MongoDB 3.0を使用しています。 photosという名前の一連のドキュメントがあるとすると、その構造は

_{"_id" : 1, photographer: "jack"}
_

database.getCollection("photos")を使用すると、MongodbはMongoCollectionオブジェクトを返します。このオブジェクトにcount()メソッドを使用して、返されたドキュメントの数を取得します。

ただし、特定の条件でクエリを実行すると、たとえば、IDが100より小さいドキュメントを検索します。

_photosCollections.find(Document.parse("{_id : {$lt : 100}}"))
_

上記のfindメソッドは、常にcount()関数を提供しないカーソルを返します。では、返されたドキュメントの数を知るにはどうすればよいですか?私はコマンドラインで知っています、私は使うことができます

_db.photos.find({_id : {$lt : 100}}).count()
_

もちろん、私はイテレータを通過して、自分でドキュメントの数を数えることができます。しかし、それは本当に不器用だと思います。 MongoDB Javaドライバはfind()メソッドによって返されるドキュメントの数をカウントするような機能を提供しますか?そうでない場合、決定の背後にある理由は何ですか?

16
Ensom Hodder

MongoCollectionには、コレクション内のドキュメントの数を返すcount()メソッドがありますが、コレクション内のドキュメントの数を返すcount(Bson filter)もあります与えられたオプションに従って

だからあなたはただ使うことができます:

long count = photosCollections.count(Document.parse("{_id : {$lt : 100}}"))

またはおそらくより明確:

Document query = new Document("_id", new Document("$lt", 100));
long count = photosCollections.count(query);

ref: http://api.mongodb.com/Java/3.3/com/mongodb/client/MongoCollection.html#count-org.bson.conversions.Bson-

11
Enrichman

同様の問題がありました。 MongoDG 3.2ガイドで使用されているDBCollectionではなく、MongoCollectionを使用しています。 MongoCollectionにはcount()メソッドがないため、イテレータを使用してカウントすることが唯一のオプションだと思います。

私の場合、ドキュメントが返されたかどうかを知る必要があるだけで、これを使用しています:

if(result.first() != null)
Bson bson = Filters.eq("type", "work");
List<Document> list = collection.find(bson).into(new ArrayList<>());
System.out.println(list.size());

into(A)(Aはコレクション型)メソッドは、すべてのドキュメントを反復処理し、それぞれを指定されたターゲットに追加します。次に、返されたドキュメントの数を取得できます。

5
Sandeep sandy

MongoDB 3.4では、フィルターによって返されるドキュメントの数を取得するために使用できるのはterterableのイテレーターのみです。例えば.

`FindIterable findIterable = 
 mongoCollection.find(Filters.eq("EVENT_TYPE", "Sport"));
    Iterator iterator = findIterable.iterator();
    int count = 0;
    while (iterator.hasNext()) {
        iterator.next();
        count++;
    }
    System.out.println(">>>>> count = " + count);

`

5
NOTiFY

APIドキュメントは、 DBCursorオブジェクトがcountメソッドを提供することを明確に述べています

MongoClient client = new MongoClient(MONGOHOST,MONGOPORT);
DBCollection coll = client.getDB(DBNAME).getCollection(COLLECTION);

DBObject query = new Querybuilder().start()
                  .put("_id").lessThan(100).get();

DBCursor result = coll.find(query);

System.out.println("Number of pictures found: " + result.count() );
0