Mongo 数据库,集合的文档计数不匹配

Mongo DB, document count mismatch for a collection

我在 mongo 中有一个集合用户。当我对这个集合进行计数时,我得到了 13204951 个文档

> db.User.count()
13204951

但是当我试图找到像这样的非过时文档的数量时,我得到了 13208778

> db.User.find({"_id": {$exists: true, $ne: null}}).count()
13208778
> db.User.find({"UserId": {$exists: true, $ne: null}}).count()
13208778

我什至尝试使用 MongoEngine 获取此集合的计数

user_list = set(User.objects().values_list('UserId'))
len(resume_list)
13208778

这是这个 User 集合的索引

>db.User.getIndexes()
[
        {
                "v" : 1,
                "key" : {
                        "_id" : 1
                },
                "name" : "_id_",
                "ns" : "user_db.User"
        },
        {
                "v" : 1,
                "unique" : true,
                "key" : {
                        "UserId" : 1
                },
                "name" : "UserId_1",
                "ns" : "user_db.User",
                "sparse" : false,
                "background" : true
        }
]

有关如何调试来自不同查询的计数不匹配的任何指示。

参考这个document

On a sharded cluster, db.collection.count() can result in an inaccurate count if orphaned documents exist or if a chunk migration is in progress.

另外,参考这个

如果你没有使用分片集群,可以参考this question

基本思路是 db.{collection}.count() 可能会做一些技巧使其快速达到 return 计数,但它可能不准确,使用 count() with query 应该是准确的.