我有一个名为股票的集合,我在其上创建了一个复合索引,如下所示

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/

10-12 12:35
查看更多