我正在寻找一种可行的方法来获取MongoDB中游标的长度。
答案 0 :(得分:8)
计算游标引用的文档数。附加
count()
查询的find()
方法返回匹配数 文档。该操作不执行查询,而是计数 查询返回的结果。
db.collection.find(<query>).count()
https://docs.mongodb.com/manual/reference/method/db.collection.count/
答案 1 :(得分:4)
实际上就像
len(list(cursor))
请注意,它将消耗游标。
答案 2 :(得分:3)
根据pymongo documentation,Pymongo游标,有一个count
方法:
count(with_limit_and_skip=False)
默认情况下,此方法返回游标的总长度,例如:
cursor.count()
如果您使用with_limit_and_skip=True
调用此方法,则返回的值会考虑limit
和skip
个查询。例如,以下查询将返回5(假设您有超过5个文档):
cursor.limit(5).count(True)
答案 3 :(得分:2)
我发现使用cursor.iter().count()
是解决此问题的可行方法
答案 4 :(得分:2)
先前答案的变体
len(list(cursor.clone())
不消耗游标
答案 5 :(得分:1)
从pymongo 3.7开始不推荐使用cursor.count
方法。
推荐的方法是使用集合的count_documents
方法。
答案 6 :(得分:1)
由于某些原因,某些聚合返回的对象不具有相同的方法(可能是不同的类,简单的解决方案),将伪游标转换为数组:
// A simple aggregation with `group`
var cursor = db.getCollection('collection').aggregate([
{$match: {
"property": {"$exists": true }
}},
{$group: {
_id: '$groupable',
count: {$sum: 1}
}},
{$sort: {
count: -1
}}
]);
// Converting the "cursor" into an array
var cursor_array = cursor.toArray();
// Looping as an array using `for` instead of `while`
for (var i = 0; i < cursor_array.length; i++) {
print(cursor_array[i]._id+'\t'+cursor_array[i].count);
}
请注意,此解决方案仅适用于外壳程序,我不知道其他库中是否存在此数组方法。