MongoDB count() 查询 returns 在 mongo shell 中的过时结果

MongoDB count() query returns outdated result in mongo shell

我的 MongoDB collection 中的文档经常更改状态字段。我可以很清楚地看到它,使用 mongoDB 客户端 (Robo 3T)。

现在我想使用 mongo shell:

来监控这个过程
mongo --host=localhost db --eval "db.getCollection('events').find({status:'ACTIVE'}).count()"

这个 return 是一个正确的结果,但是 mongoDB "caches" 它不会 return 再过 10 秒更新结果。我需要每 200 毫秒更新一次。

来自 Robo 3T 的相同查询总是 return 更新结果,大约 5 毫秒。

根据我的观察,当负载较低时,每个请求都会 mongo shell 计数更新。

我在 MongoDB 文档中找不到任何 cache-like 机制信息。我怎样才能禁用它?为什么在 Robo 3T 上没问题?

P.S

我在 python 脚本中观察到相同的行为,该脚本使用 count() 查询轮询 mongo - 结果被缓存。但是一旦我开始在 Robo 3T 中执行查询,数字就开始在 python 和 mongo shell 中移动!发生了什么事?

尝试删除集合的所有缓存查询计划:

db.collection.getPlanCache().clear()

如果您不更改 where 条件,更新将被缓存。

文档:Plan cache

使用 itcount() 实际在现有迭代器上执行查询。

mongo --host=localhost db \
    --eval "db.getCollection('events').find({status:'ACTIVE'}).itcount()"