我有一个名为股票的集合,我在其上创建了一个复合索引,如下所示
db.stocks.ensureIndex({"symbol":1,"date":1,"type": 1, "isValid": 1,"rootsymbol":1,"price":1},{"unique" : false})
我已经设置了 profilinglevel,以找出所有慢查询。
下面的查询之一花费了 38 毫秒,何时对其进行了解释,这是以下结果
抱歉,我已经更新了我的问题
db.stocks.find({ query: { symbol: "AAPLE", date: "2014-01-18", type: "O", isValid: true }, orderby: { price: "1" } }).explain();
{
"cursor" : "BasicCursor",
"nscanned" : 705402,
"nscannedObjects" : 705402,
"n" : 0,
"millis" : 3456,
"indexBounds" : {
}
}
我的问题是为什么它显示一个 BasicCursor 即使它有索引?
最佳答案
我很确定这里的问题是您对 find()
函数的使用。您正在指定一个 query
参数并在其中放置您的搜索条件。我不认为你需要真正把 query
放在那里。只需插入您的搜索条件。像这样的东西:
db.stocks.find({
symbol: "AAPLE",
date: "2014-01-18",
type: "O",
isValid: true
}).sort( { "price": 1} ).explain();
还要注意我对排序的更改。您可以阅读有关对游标 here 进行排序的更多信息。
关于mongodb - 为什么即使集合上有索引,解释查询输出也会给我基本光标?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18723158/