2

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

4

2 回答 2

2

count()从元数据字段中获取相应的值,count并且在分片环境中可能会显示错误的值(存在错误)。它可以计算当前由平衡器移动的块。我假设您有多个分片。

count在修复上述错误(2.5?)之前,我不会真正依赖带有分片的环境并使用简单的 M/R 脚本(顺便尝试使用 M/R 来查看它)。您还可以查看我关于计数的问题 - db.collection.count() 为 MongoDB 中的分片集合返回更多文档

于 2013-10-09T14:43:22.747 回答
-1

如果 count() 和 limit() 行为怪异,也许你最好的办法是尝试修复数据库。进入 Mongo Shell 并输入以下命令:

db.repairDatabase()

有关进一步的解释,您可以查看MongoDB 文档

于 2013-10-09T15:16:16.130 回答