我只是创建一个新索引,在mongoose的帮助下添加它:
test.index({"source": 1, "tickers.exchange": 1, "tickers.symbol": 1, "report_date": -1});
在db中 - 我可以看到索引已正确添加:
Index Value: source_1_tickers.exchange_1_tickers.symbol_1_report_date_-1
现在,当我尝试执行与索引完全匹配的查询时,它仍然不会使用此索引而是使用其他索引:
db.getCollection('test').find({
source: 'testSource',
'tickers.exchange': { $all: ['TEST_EXCHANGE'] },
'tickers.symbol': { $all: ['TEST_SYMBOL'] },
report_date: { $gte: ISODate('2016-07-01T00:00:00.000Z'),
$lte: ISODate('2016-09-30T23:59:59.999Z') },
change: { $gt: 0 }
})
我使用explain('executionStats');
来查看使用哪个索引产生以下内容:
tickers.symbol_1_change_1_report_date_1
试图找出原因