MongoDB查询不使用所需的索引

时间:2013-02-23 12:36:43

标签: mongodb database nosql

我正在使用.Net SDK 我有一个具有以下结构的文档:

public class ChallengeComment
{
    public long Id { get; set; }
    public long ChallengeId { get; set; }
    public long OwnerId { get; set; }
    public DateTime ChallengeCreatedDateTime { get; set; }
    public DateTime CreatedDateTime { get; set; }
    public string Content { get; set; }
}

我已使用索引编号:

IMongoIndexKeys keys = new IndexKeysDocument {{ "OwnerID", 1 }, { "CreatedDateTime", 1 }, { "ChallengeCreatedDateTime", 1 } };
      IMongoIndexOptions options = IndexOptions.SetUnique(false);
_mongoDatabase.GetCollection("ChallengeComment").EnsureIndex(keys,options);

索引已成功构建

我正在执行以下查询

var query =
          (from item in collection.AsQueryable<ChallengeComment>()
           where item.OwnerId == 162399
          orderby item.CreatedDateTime, item.ChallengeCreatedDateTime
          select item).Take(10);
然而,

正在执行全表扫描。 我知道订单在索引中很重要。我认为这是正确的,尽管我可能弄错了。

关于我做错的任何想法?

2 个答案:

答案 0 :(得分:1)

OMG认为我即将开枪......

在索引中,我将其中一个键指定为OwnerID 但是在查询中我使用了OwnerId 小写'd' 因此它没有使用正确的索引。

我不会再犯那个错误!!!

答案 1 :(得分:0)

应该是 ... where item.OwnerID = 162399 而不是 ... where item.OwnerId

错字版本

var query =(from item in collection.AsQueryable<ChallengeComment>() where item.OwnerId == 162399 orderby item.CreatedDateTime, item.ChallengeCreatedDateTime select item).Take(10);

更正版本

var query =
          (from item in collection.AsQueryable<ChallengeComment>()
           where item.OwnerID == 162399
          orderby item.CreatedDateTime, item.ChallengeCreatedDateTime
          select item).Take(10);
相关问题