Mongos计算的物品不是真的吗?

时间:2013-10-09 13:47:55

标签: mongodb count find sharding replicaset

我在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!

2 个答案:

答案 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