我在 mongos 实例中有一个 count() 函数的奇怪行为。 一个多小时前,我更新了帖子集合中的大约 8.000 个项目,因为我需要将标签对象转换为数组。
现在,当我查询 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!
最佳答案
count()
从元数据字段 count
中获取相应的值,在分片环境中可能会显示错误的值(有一个 bug )。它可以计算当前由平衡器移动的 block 。我假设您有多个分片。
在上述错误被修复之前,我不会真正依赖于带有分片的环境中的 count
而是使用简单的 M/R 脚本(顺便尝试使用 M/R 来查看它)( 2.5?)。您也可以看看我关于计数的问题 - db.collection.count() returns a lot more documents for sharded collection in MongoDB
关于mongodb - Mongos 计数项目不是真实的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19273939/