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

OMG 私は自分自身を撃とうとしていると思います...

インデックスでは、キーの 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 に答える