MongoDBから取得したカーソルの長さを取得する実行可能な方法を探しています。
cursor.count
メソッドはpymongo 3.7以降廃止されました。
推奨される方法は count_documents
コレクションのメソッド。
カーソルによって参照されるドキュメントの数をカウントします。
count()
メソッドをfind()
クエリに追加して、一致するドキュメントの数を返します。この操作ではクエリは実行されませんが、代わりにクエリによって返される結果がカウントされます。
db.collection.find(<query>).count()
https://docs.mongodb.com/manual/reference/method/db.collection.count/
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)
cursor.iter().count()
を使用すると、この問題を解決できる可能性があることがわかりました
何らかの理由で、一部の集計は同じメソッドを持たないオブジェクト、おそらく異なるクラス、単純な解決策を返し、疑似カーソルを配列に変換します:
// 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);
}
このソリューションはシェル専用であることに注意してください。この配列メソッドが他のライブラリに存在するかどうかはわかりません。
それは実際には簡単です
len(list(cursor))
ただし、カーソルを消費することに注意してください。