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

时间:2017-06-19 03:49:23

标签: mongodb mongodb-query mongoengine

我在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
        }
]

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

1 个答案:

答案 0 :(得分:2)

请参阅此document

  

在分片群集上,如果存在孤立文档或正在进行块迁移,db.collection.count()可能会导致计数不准确。

另请参阅此question

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

基本的想法是db.{collection}.count()可能会做一些技巧来快速返回计数,而且可能不准确,使用带有查询的count()应该是准确的。