how to call count operation after find with mongodb java driver

让人想犯罪 __ 提交于 2019-12-06 17:32:09

问题


I am using MongoDB 3.0. suppose there is a set of documents named photos, its structure is

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

with database.getCollection("photos"), Mongodb will return a MongoCollection object, on which I have the method count() to get the number documents returned.

However, when I make queries with specific conditions. For example find documents with id smaller than 100 :

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

Above find method will always return a cursor which doesn't provide a count() function. So how can I know how many documents returned ? I know on command line, I can use

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

Of course, I can go through the iterator and count the number of documents myself. However I find it really clumsy. I am wondering does MongoDB java driver provides such functionality to count the number of documents returned by the find() method ? If not, what is the reason behind the decision ?


回答1:


As you said the MongoCollection has the count() method that will return the number of documents in the collection, but it has also a count(Bson filter) that will return the number of documents in the collection according to the given options.

So you can just use:

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

or maybe clearer:

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-




回答2:


I had a similar problem. I am using MongoCollection instead of DBCollection, as it is what it is used in MongoDG 3.2 guide. MongoCollection hasn't got count() method, so I think the only option is to use the iterator to count them.

In my case I only needed to know if any document has been returned, I am using this:

if(result.first() != null)



回答3:


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

into(A) (A is collection type) method iterates over all the documents and adds each to the given target. Then we can get the count of the returned documents.




回答4:


In MongoDB 3.4 you can only use the Iterator of FindIterable to get the count of the documents returned by a filter. e.g.

`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:


The API docs clearly state that DBCursor Object provides a count method:

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


来源:https://stackoverflow.com/questions/32683458/how-to-call-count-operation-after-find-with-mongodb-java-driver

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!