Mongo查询在生产中需要76秒,但不使用Mongo shell

我有一个查询:

db.content.find({ "$or" : [ { "cik" : "0000764839"} , { "entitiesDetected.ids" : "ZqH9BvtitcYR88NKC"}], "pubDate" : { "$gt" : { "$date" : -2206281600000}}, "orderBy": {"pubDate": -1, "title": 1}}).explain()

在生产中,根据MMSconfiguration文件,需要76秒才能将数据返回给客户端。

但是,当我在Mongo shell中运行相同的查询时,我得到了12的nscanned,而且速度很快 – 7毫秒。

那么有什么可能是错的? 我询问了彩信人员,在我的彩信档案中是否有显而易见的东西,他们似乎并不认为有什么明显的错误。 我被困在这一点上。

我在Linode 2048上使用Ubuntu 14.04(两个核心 – 2GB RAM)。

您的驱动程序可能会添加超出索引的隐含sorting顺序,特别是在任何这些字段上使用复合索引时。 您需要在应用程序的查询中运行.explain() ,然后在mongo shell查询中运行这两个输出。 您还应该比较应用程序进行查询时logging的日志行与shell执行查询时的日志行。 记下任何索引,特别是包括复合索引,以及与查询sorting顺序相比的sorting顺序。