Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb Mongos计数项目不真实?_Mongodb_Count_Find_Sharding_Replicaset - Fatal编程技术网

Mongodb Mongos计数项目不真实?

Mongodb Mongos计数项目不真实?,mongodb,count,find,sharding,replicaset,Mongodb,Count,Find,Sharding,Replicaset,在mongos实例中,count()函数有一个奇怪的行为。 一个多小时前,我更新了posts集合中的大约8000项,因为我需要将标记对象转换为数组 现在,当我查询mongos时: mongos> db.posts.find({blog: 'blog1', tags: {$type: 3}}).count() 4139 mongos> db.posts.findOne({blog: 'blog1', tags: {$type: 3}}) null 为什么count()显示4139个项

在mongos实例中,count()函数有一个奇怪的行为。 一个多小时前,我更新了posts集合中的大约8000项,因为我需要将标记对象转换为数组

现在,当我查询mongos时:

mongos> db.posts.find({blog: 'blog1', tags: {$type: 3}}).count()
4139
mongos> db.posts.findOne({blog: 'blog1', tags: {$type: 3}})
null
为什么count()显示4139个项目,而findOne返回空值,即使RS是同步的

编辑: 共有4个RS(均已同步)。 我还对所有原色进行了相同的计数查询,结果总是0。 如果我指望mongos,结果是4139

count()。它可以计算当前由平衡器移动的块。我假设你有不止一个碎片

在上面提到的bug被修复之前(2.5?),我不会真正依赖于使用碎片的环境中的
count
,而是使用简单的M/R脚本(顺便说一句,尝试使用M/R查看)。您还可以看看我关于count的问题-

如果count()和limit()的行为异常,那么您最好尝试修复数据库。进入Mongo Shell并输入以下命令:

db.repairDatabase()

有关进一步的解释,您可以检查。

如果使用db.posts.find({blog:'blog1',tags:{$type:3}})。limit(1),它是否有效?你能显示一个文档吗?空结果也有限制(1):mongos>db.posts.find({blog:'blog1',tags:{$type:3})。限制(1)null@Ligio你能比较两个计数值吗?一个来自db.post.stats(),另一个来自你的第一个查询?@Alex P:我认为collection stats()函数将返回整个数据集的统计数据,而不仅仅是过滤后的值。因此,stats中的计数值没有帮助,不是吗?你能给我们看一个sh.status()吗?这个特定的计数不应该来自元数据,当它对集合中的所有行进行计数时,该错误适用于无筛选器。据我所知,筛选器条件总是false,所以我猜它试图在整个集合上运行它。嗯,英语有点模糊,但是count只有在没有查找条件的情况下才会从元数据中获得,我相信他的意思是在
count()
函数中没有过滤器,即
count({a:1})
哦,是的,你是对的,这个bug在这种情况下可能是无关的。我想知道这个集合的
stats()
中的
count
值是多少。我会删除我的答案。不要删除它,我想这可能是有联系的,但不是全部原因。我必须执行一些测试来找出为什么计数如此糟糕,这可能与最近计数优化中的一个错误有关,这可能意味着它不再完全计数实际行