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 应该是准确的.
我在 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 应该是准确的.