2015-09-20 10 views
9

MongoDB 3.0を使用しています。私はドキュメントが返さ数を取得する方法count()を持っている上photosという名前のドキュメントのセットがあるとし、その構造はdatabase.getCollection("photos")mongodb javaドライバで見つけた後のカウント操作の呼び出し方法

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

で、MongoDBは、MongoCollectionオブジェクトを返します。

しかし、特定の条件でクエリを実行すると、たとえば100未満のIDを持つ文書を検索:

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

find上記の方法は、常にcount()機能を提供していないカーソルを返します。では、返されたドキュメントの数はどのように知ることができますか?私は自分自身をイテレータを通過し、ドキュメントの数を数えることができる、私はもちろん

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

使用することができ、コマンドライン上で知っています。しかし、私はそれが本当に不器用だと思う。私はMongoDB javaドライバはfind()メソッドによって返されたドキュメントの数を数えるためにこのような機能を提供しているのだろうか?そうでない場合は、決定の背後にある理由は何ですか?私は同様の問題があった

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()); 

答えて

1

APIドキュメントは明らかにDBCursor Object provides a count methodと述べています。私はDBCollectionの代わりにMongoCollectionを使用しています。これはMongoDG 3.2のガイドで使用されているものです。 MongoCollectionはcount()メソッドを持っていないので、唯一のオプションはイテレータを使ってカウントすることだと思います。私は、任意のドキュメントが返されたかどうかを知るために必要な私の場合は

は、私はこれを使用しています:へ

if(result.first() != null) 
+0

はい、カウント()メソッドは、MongoDBの2.0に設けられたが、MongoDBの3.0で除去しました。私は理由がわからない...... –

+0

@EnsomHodder http://mongodb.github.io/mongo-java-driver/3.0/driver/getting-started/quick-tour/ URLの3.0に注意してください。テスト済み、作品。 –

+0

クエリビルダが存在しません – PedroD

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

(A)は、すべての文書オーバー法の繰り返し処理(Aは、コレクションタイプです)与えられたターゲットにそれぞれを追加します。その後、返されたドキュメントの数を取得できます。

6

あなたはする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:あなただけのカウントを取得するためにFindIterableのIteratorを使用することができるのMongoDB 3.4ではhttp://api.mongodb.com/java/3.3/com/mongodb/client/MongoCollection.html#count-org.bson.conversions.Bson-

1

フィルタによって返されたドキュメントの例えば

`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); 

`

関連する問題