Count does not filter out unowned (orphaned) documents and can therefore report larger values than one will find via a normal query, or using itcount() in the shell.
The following conditions can lead to counts being off:
- Active migrations
- Orphaned documents (left from failed migrations)
- Non-Primary read preferences (see SERVER-5931)
A workaround to get accurate counts is to ensure all migrations have been cleaned up and no migrations are active. To query non-primaries you must also ensure that there is no replication lag including any migration data, in addition to the above requirements.
For issues with counts/reads from non-primaries please see SERVER-5931