0

我正在使用 .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);

但是正在执行全表扫描。我知道索引中的顺序很重要。我相信这是正确的,尽管我可能是错误的。

关于我做错了什么的任何想法?

4

2 回答 2

1

天哪,我想我要开枪了……

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

我不会再犯这种错误了!!!

于 2013-02-25T13:43:10.550 回答
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);
于 2013-02-25T13:50:35.817 回答