Eagle
Eagle

Reputation: 378

Cursor.count() gives AttributeError in pymongo 4.3.3

As the title suggests, I am trying to use count() with a find() on a collection but it keeps throwing the error AttributeError: 'Cursor' object has no attribute 'count'.

For reference, I went through this question but count_documents() seems to be tehre for colelctions themselves, and not cursors. The other option mentioned was len(list(cursor)) but I can't use that as it consumes the cursor itself (can't iterate over it after this). I went through a couple more answers, but these seem to be the main ways out.

Moreover, my pymongo version is 4.3.3 which can't be changed due to some restrictions.

Is there any operation I can perform directly on Cursor which doesn't consume it?

Sample code

def temp(col):
    return col.find().count()

print(temp(collection))

Thanks!

Upvotes: 4

Views: 8489

Answers (2)

Roger Hayashi
Roger Hayashi

Reputation: 91

You can use:

db.collection.count_documents(query)

In your case:

def temp(col):
    return col.count_documents({})

Upvotes: 0

Belly Buster
Belly Buster

Reputation: 8834

list() will exhaust the cursor, but save its ouput to a variable and you can access it multiple times, e.g.

records = list(col.find())
num_records = len(records)

for record in records:
    # do stuff

Upvotes: 3

Related Questions