FindIterable <document>如何获取查询结果中的总记录

时间:2015-11-17 15:33:50

标签: java mongodb

我在java 2.x上使用mongo驱动程序并传递给3.1。 public已弃用,我必须使用namespace{ namespace A{ using name = type; } } 结构。

当我执行查询时

DBCursor

我想获得结果集中记录总数的计数,查询只在一个查询中找到。

如何在不执行其他查询的情况下检索计数? 我没有谈到限制中的10条记录,而是记录总数。

我想执行一个查询来检索计数和查找。我不想执行查找和计数。

由于

6 个答案:

答案 0 :(得分:1)

有计数方法可用。 它接受Bson过滤器。所以在获取集合对象后,可以直接放入count函数。 MongoCollection collection = db.getCollection(collectionName); long totalFilteredRecords = collection.count(“field”,“value”);

答案 1 :(得分:1)

您可以使用:

(mongo).getCollection().count(findArgs);

答案 2 :(得分:0)

虽然这个问题已经过时了,你可能已经找到了答案,但我会把这个问题发给像我一样的新手,他们正在努力争取像这样小的东西。 没有任何查询,您可以直接使用&#34; Count&#34;

mongoClient = new MongoClient("localhost", 27017);
              DB db = mongoClient.getDB("DatabaseName");
              DBCollection coll = db.getCollection("CollectionName");
              long count = coll.count();

希望它有所帮助!

答案 3 :(得分:0)

在新版本中不推荐使用

fetchone()。您可以使用:

MongoCollection.count()

例如

long result = collection.countDocuments(findArgs);

答案 4 :(得分:0)

FindIterable基本上是一个迭代器。迭代器不知道它们将返回的元素的总大小。我发现做到这一点的最佳方法是创建一个“查询图”,但要进行两个查询操作(查找和计数)。

类似这样的东西(时髦):

Map query = [_id: [$in:idList]]

FindIterable userList = User.collection.find(query).skip(offset).limit(max)

Integer totalCount = User.collection.count(query)

我知道这不是你追求的目标,但是我相信你想要的是不可能的。

另一种方法是使用聚合(mongodb 3.4+版本),但是不确定是否对您更好。 Here

答案 5 :(得分:0)

这是一个古老的问题。一个典型的答案是使用count()方法。但是,考虑到性能,它并不总是首选方法。

要执行count()方法,MongoDB服务器必须遍历与过滤器匹配的所有文档。如果匹配的文件总数很大,并且胜出的方案不是最佳方案,那将非常慢,并且会占用大量的负担。

一种常见的策略是预测结果以帮助MongoDB优化获胜计划。因此,成功的计划很可能是最佳方案。它将比纯count()更快。

然后,使用Iterable size方法(例如,来自 guava 的方法),代码如下:

Iterable<?> it = table.find(filterBson).projection(new Document("_id", 1));
int count = Iterables.size(it);