我正在使用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()
方法返回的文档数量?如果没有,决定背后的原因是什么?
答案 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);
答案 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() );