用mongodb java驱动程序查找后如何调用count操作

时间:2015-09-20 19:35:35

标签: mongodb 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()方法返回的文档数量?如果没有,决定背后的原因是什么?

5 个答案:

答案 0 :(得分:10)

正如您所说,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);

参考:http://api.mongodb.com/java/3.3/com/mongodb/client/MongoCollection.html#count-org.bson.conversions.Bson-

答案 1 :(得分:4)

我有类似的问题。我正在使用MongoCollection而不是DBCollection,因为它是在MongoDG 3.2指南中使用的。 MongoCollection没有count()方法,所以我认为唯一的选择是使用迭代器来计算它们。

在我的情况下,我只需要知道是否有任何文件被退回,我使用的是:

if(result.first() != null)

答案 2 :(得分:4)

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

进入(A)(A是集合类型)方法迭代所有文档并将每个文档添加到给定目标。然后我们可以得到返回文件的计数。

答案 3 :(得分:4)

在MongoDB 3.4中,您只能使用FindIterable的Iterator来获取过滤器返回的文档的计数。 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);

`

答案 4 :(得分:0)

API文档明确指出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() );