我在mongos实例中有一个奇怪的count()函数行为。 一个多小时前,我在posts集合中更新了大约8.000项,因为我需要将标签对象转换为Array。
现在,当我用:
查询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(全部同步)。 我也对所有PRIMARIES进行了相同的计数查询,结果始终为0。 只有依靠mongos,结果才是4139!
答案 0 :(得分:2)
count()
从元数据字段count
获取相应的值,并且在分片环境中可能显示错误的值(有bug)。它可以计算当前由平衡器移动的块。我假设你有多个碎片。
我不会真正依赖count
环境与分片,而是使用简单的M / R脚本(顺便尝试用M / R看),直到上面提到的bug将被修复(2.5?) 。您还可以查看有关计数的问题 - db.collection.count() returns a lot more documents for sharded collection in MongoDB
答案 1 :(得分:-1)
如果count()和limit()表现得很奇怪,也许你最好的镜头是试图修复数据库。进入Mongo Shell并输入以下命令:
db.repairDatabase()
有关详细说明,请查看MongoDB docs。