我正在运行像这样的mongo查询
db.getCollection('collection').find({stringField:"stringValue", arrayField:{$exists:true, $ne:[]}}).sort({dateField:-1})
该收藏集约有10 ^ 6个文件。我在stringField和dateField上都有索引(都升序)。此查询需要〜3-4秒来运行。
但是,如果我将查询更改为以下任何一个,它将在100ms内执行
删除$ne
db.getCollection('collection').find({stringField:"stringValue", arrayField:{$exists:true}}).sort({dateField:-1})
删除$exists
db.getCollection('collection').find({stringField:"stringValue", arrayField:{$ne:[]}}).sort({dateField:-1})
删除排序
db.getCollection('collection').find({stringField:"stringValue", arrayField:{$exists:true, $ne:[]}})
使用arrayField.0
db.getCollection('foodfulfilments').find({stringField:"stringValue", "arrayField.0":{$exists:true}}).sort({dateField:-1})
对这些查询的解释并没有提供任何洞见,说明为什么第一个查询如此缓慢?
MongoDb版本3.4.18