web-dev-qa-db-ja.com

Pythonを使用してmongodbからカーソルの長さを取得する方法は?

MongoDBから取得したカーソルの長さを取得する実行可能な方法を探しています。

11
Wallace

cursor.count メソッドはpymongo 3.7以降廃止されました。

推奨される方法は count_documents コレクションのメソッド。

9
Jérôme

cursor.count()

カーソルによって参照されるドキュメントの数をカウントします。 count()メソッドをfind()クエリに追加して、一致するドキュメントの数を返します。この操作ではクエリは実行されませんが、代わりにクエリによって返される結果がカウントされます。

db.collection.find(<query>).count()

https://docs.mongodb.com/manual/reference/method/db.collection.count/

7
Kjjassy

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
Alex

cursor.iter().count()を使用すると、この問題を解決できる可能性があることがわかりました

2
Wallace

何らかの理由で、一部の集計は同じメソッドを持たないオブジェクト、おそらく異なるクラス、単純な解決策を返し、疑似カーソルを配列に変換します:

// 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);
}

このソリューションはシェル専用であることに注意してください。この配列メソッドが他のライブラリに存在するかどうかはわかりません。

0
Rodrigo Polo

それは実際には簡単です

len(list(cursor))

ただし、カーソルを消費することに注意してください。