我发布这篇文章是因为遇到了我无法理解的问题。
问题在于,当其他客户端对mongodb执行查询时,同一查询的结果不同。
我没有足够的时间来解释...具体来说,我们的Web服务已经使用mongodb shard集群(4个主节点,4个辅助节点)大约1年了,并且我们拥有各种各样的支持端统计服务。每个服务都有一些客户端,例如mongodb java驱动程序和python驱动程序。
有一天,我们意识到聚合查询的结果是错误的,因为我们的计划团队指出,实际Web服务和聚合中的计数是不同的。首先,我们怀疑python开发的聚合服务是错误的,因为我们没有运行Web服务的经验。因此,我们通过了它,因为我们认为这是完全不可能的。
但是,在15天之后,我们再次遇到了这个问题。查询很简单,但是针对网络服务的python驱动程序和java驱动程序的结果是不同的。例如,使用mongo java驱动程序3.6.3的Web服务中的行数为90,但是python的stats服务中的行数为15。此外,当我们通过robo mongo检查时,行数为15。奇怪的是,当我直接连接mongos shell执行完全相同的查询时,它是正确的。更奇怪的是,在shell中执行相同的查询后,python和robo mongo的查询正确了。 接下来,我们猜测该问题是由客户端引起的。因此,我们跟踪了所用客户端的版本。版本如下。
mongodb java driver for web service : 3.6.3
mongodb java driver for presto : 3.6.0
pymongo for stats service : 3.7.2
Robo 3T 1.2.1
但是,我们意识到Robo 3T嵌入了真正的mongodb shell。我们的假设是不正确的。最后,我正在写这篇文章。.;(
我认为很难找到导致此问题的原因,但是我希望mongodb的一些不错的用户可以为分析此原因提供一些建议。
谢谢。