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

问题描述 投票:0回答:2

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

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

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

这将返回正确的结果,但随后mongoDB“缓存”它并且不会再返回更新的结果~10秒。我需要每200毫秒更新一次。

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

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

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

P.S

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

mongodb mongo-shell robo3t
2个回答
1
投票

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

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

0
投票

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

db.collection.getPlanCache().clear()

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

Doc:Plan cache

© www.soinside.com 2019 - 2024. All rights reserved.