mongodb count vs find with count [duplicate]

2019-06-10 12:08发布

问题:

This question already has an answer here:

  • Difference between count() and find().count() in MongoDB 5 answers

I am performing a count of documents in a mongo (versions 2.4 and 3.2) collection. The collection is very big, 3821085 documents. I need to count all documents with a reference _id. I have tried two different queries:

db.SampleCollection.find({"field._id" : ObjectId("UUID")}).count() db.SampleCollection.count({"field._id" : ObjectId("UUID")})

This query takes a very long time. So much time that I have not let it complete, more than 5 minutes and I get scared and kill it.

For this collection field._id is not an index. I do not have relevant info to use an index with this query.

Is there a better approach to count document in mongo.

UPDATE:

I understand that I need an index on the field field._id. If I did have an index for the field which approach would perform better on a large collection db.SampleCollection.find(...).count() or db.SampleCollection.count(...)? Or is there no difference between the two?

回答1:

In your scenario, you should have an index.

Indexes support the efficient execution of queries in MongoDB. Without indexes, MongoDB must perform a collection scan, i.e. scan every document in a collection, to select those documents that match the query statement.

https://docs.mongodb.com/manual/indexes/

UPDATE:

the question asked now is different. Is "collection.find({}).count()" more fast then "collection.count()"?

According to the MongoDB documentation:

count() is equivalent to the db.collection.find(query).count() construct. https://docs.mongodb.com/manual/reference/method/db.collection.count/



回答2:

You should add an index on field._id like this:

db.SampleCollection.createIndex( { "field._id": 1 } );

Then all the queries trying to find/count documents by that field will use this index and will perform faster. For example:

db.SampleCollection.count({"field._id" : ObjectId("UUID")});

See - https://docs.mongodb.com/manual/core/index-single/ and MongoDB 'count()' is very slow. How do we refine/work around with it?



标签: mongodb nosql