Ligio
Ligio

Reputation: 627

Mongos count items not real?

I have a strange behavior of count() function in a mongos instance. More than one hour ago I updated about 8.000 items in posts collection because I needed to convert tags objects to Array.

Now, when I query mongos with:

mongos> db.posts.find({blog: 'blog1', tags: {$type: 3}}).count()
4139
mongos> db.posts.findOne({blog: 'blog1', tags: {$type: 3}})
null

Why count() shows 4139 items and findOne returns a null value, even if RS are synchronized ?

EDIT: There are 4 RS (all synchronized). I also did the same count query on all PRIMARIES and the result is always 0. Only if I count on mongos the result is 4139!

Upvotes: 2

Views: 1046

Answers (2)

Roman Rdgz
Roman Rdgz

Reputation: 13254

If count() and limit() are acting weird, maybe your best shot is trying to repair the database. Go into the Mongo Shell and enter the following command:

db.repairDatabase()

For further explanations you can check the MongoDB docs.

Upvotes: -1

Alex P
Alex P

Reputation: 1751

count() takes corresponding value from metadata field count and on a sharded environment can show wrong value (there is a bug). It may count chunks which are currently moved by the balancer. I assume that you have more than one shard.

I would not really rely on count on environment with shards and use simple M/R script instead (try to see it with M/R by the way) until above mentioned bug will be fixed (2.5?). You can also take a look at my question regarding count - db.collection.count() returns a lot more documents for sharded collection in MongoDB

Upvotes: 2

Related Questions