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

时间:2019-02-18 03:07:53

标签: mongodb mongo-shell robo3t

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

现在,我想使用mongo shell监视此过程:

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

这将返回正确的结果,但是mongoDB会“缓存”它,并且在大约10秒钟内不会返回更新的结果。我需要每200毫秒进行一次更新。

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

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

我在MongoDB文档中找不到任何类似于缓存的机制信息。如何禁用它?为什么在Robo 3T上可以正常使用?

PS

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

db.collection.getPlanCache().clear()

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

文档:Plan cache