如何使用python从mongodb获取游标的长度?

时间:2016-02-29 05:44:16

标签: python mongodb python-2.7 pymongo

我正在寻找一种可行的方法来获取MongoDB中游标的长度。

7 个答案:

答案 0 :(得分:8)

cursor.count()

  

计算游标引用的文档数。附加   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调用此方法,则返回的值会考虑limitskip个查询。例如,以下查询将返回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);
}

请注意,此解决方案仅适用于外壳程序,我不知道其他库中是否存在此数组方法。