我正在使用.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);
然而,正在执行全表扫描。 我知道订单在索引中很重要。我认为这是正确的,尽管我可能弄错了。
关于我做错的任何想法?
答案 0 :(得分:1)
在索引中,我将其中一个键指定为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);