我在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
}
]
有关如何调试来自不同查询的计数不匹配的任何指示。
答案 0 :(得分:2)
请参阅此document
在分片群集上,如果存在孤立文档或正在进行块迁移,db.collection.count()可能会导致计数不准确。
另请参阅此question
如果您没有使用分片群集,可以参考this question
基本的想法是db.{collection}.count()
可能会做一些技巧来快速返回计数,而且可能不准确,使用带有查询的count()
应该是准确的。