MongoDB count()查询在mongo shell中返回过期的结果

MongoDB count()查询在mongo shell中返回过期的结果,mongodb,mongo-shell,robo3t,Mongodb,Mongo Shell,Robo3t,我的MongoDB集合中的文档经常更改状态字段。使用mongoDB客户端(Robo3T),我可以非常清楚地看到这一点 现在,我想使用mongoshell监控这个过程: mongo --host=localhost db --eval "db.getCollection('events').find({status:'ACTIVE'}).count()" 这将返回一个正确的结果,但是mongoDB会“缓存”它,并且在接下来的10秒钟内不会返回更新的结果。我需要每200毫秒更新一次 来自Robo

我的MongoDB集合中的文档经常更改状态字段。使用mongoDB客户端(Robo3T),我可以非常清楚地看到这一点

现在,我想使用
mongo
shell监控这个过程:

mongo --host=localhost db --eval "db.getCollection('events').find({status:'ACTIVE'}).count()"
这将返回一个正确的结果,但是mongoDB会“缓存”它,并且在接下来的10秒钟内不会返回更新的结果。我需要每200毫秒更新一次

来自Robo 3T的同一查询总是在~5ms内返回更新的结果

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

我在MongoDB文档中找不到任何类似缓存的机制信息。如何禁用它?为什么在机器人3T上工作正常

附言


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

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

db.collection.getPlanCache().clear()
如果不更改where条件,将缓存更新


文档:

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

db.collection.getPlanCache().clear()
如果不更改where条件,将缓存更新

Doc:

使用在现有迭代器上实际执行查询的

mongo --host=localhost db \
    --eval "db.getCollection('events').find({status:'ACTIVE'}).itcount()"
实际在现有迭代器上执行查询的

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

行为是一样的。我认为这是意料之中的,因为这个命令使查询计划无效,但计划保持不变也没关系。值是不断变化的,即使在相同的情况下,它们也会不同。行为是相同的。我认为这是意料之中的,因为这个命令使查询计划无效,但计划保持不变也没关系。价值观在不断变化,即使是同一个计划,价值观也会有所不同