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()
メソッドによって返されるドキュメントの数をカウントするような機能を提供しますか?そうでない場合、決定の背後にある理由は何ですか?
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);
同様の問題がありました。 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はコレクション型)メソッドは、すべてのドキュメントを反復処理し、それぞれを指定されたターゲットに追加します。次に、返されたドキュメントの数を取得できます。
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);
`
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() );