【发布时间】:2017-06-19 03:49:23
【问题描述】:
我在 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
}
]
关于如何调试来自不同查询的计数不匹配的任何指针。
【问题讨论】:
-
这是一种有趣且令人惊讶的行为。您可以尝试运行 db.User.count({"_id": {$exists: true, $ne: null}}) 和 db.User.count({"UserId": {$exists: true, $ne: null }}) 并发布结果。
-
两个查询的计数为 - 13208778
-
我认为不可能。据我所知 _id 将始终是主键,它将始终存在于所有文档中并且不能为空。所以 db.User.count() 应该总是 >= 13208778。你可以尝试再次运行 db.users.count()。
标签: mongodb mongodb-query mongoengine