我发表这篇文章是因为我遇到了一个我无法理解的问题。
问题是,当其他客户机对mongodb执行查询时,同一个查询的结果是不同的。
我没有信心马上解释…具体来说,我们的web服务已经与mongodb shard cluster(4个主节点,4个辅助节点)一起工作了大约1年,我们包含了各种用于统计的后端服务。每个服务都有一些客户端,比如MangGDB Java驱动程序和Python驱动程序。
有一天,我们意识到聚合查询的结果是错误的,因为我们的计划团队指出,实际web服务和聚合中的计数是不同的。首先,我们怀疑python开发的聚合服务是错误的,因为我们没有运行web服务的经验。所以,我们通过了考试,因为我们认为这是不可能的。
然而,15天后,我们又遇到了这个问题。查询很简单,但是Python驱动程序和Java驱动程序对于Web服务的结果是不同的。例如,使用MyGo Java驱动程序3.63的Web服务中的行数是90,但是Python中STATS服务中的行数是15。另外,当我们被机器人蒙戈检查时,已经15岁了。奇怪的是,当我通过直接连接mongos shell执行完全相同的查询时,它是正确的。更奇怪的是,python和robo mongo在shell中执行相同的查询之后,查询变得正确了。
接下来,我们猜测这个问题是因为客户机的缘故。所以,我们跟踪了我们使用的客户端版本。版本如下。
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外壳。我们的假设是错误的。最后,我在写这篇文章。(
我认为很难找到这个问题的原因,但是我希望一些优秀的mongodb用户会给出一些小建议来分析这个原因。
谢谢您。