mongodb - Mongos 计数项目不是真实的?

标签 mongodb count find sharding replicaset

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

相关文章:

javascript - Meteor.js findOne() 无法通过 _id 找到

node.js - 在Azure中作为应用程序服务运行的node.js应用程序的暂存槽为我提供了EADDRINUSE

mongodb - Orion Context Broker 和 Docker - 来自服务器的空回复

Mongodb 对内部数组进行排序

r - 计算 r 中频率也为零的向量中的元素

linux - Unix 显示有关匹配两种模式之一的文件的信息

java - Mongo 依靠集合还是依靠游标 - 哪个更快

sql - ORACLE-SQL : Function, 如何检测空选择并返回 0

python - Pandas 数据框 : Count and Bin integers and datetime into ranges producing two output dataframes

bash - grep : how to put the filename before each match, 当文件来自管道时?