C# mongodb 2.0 查找和投影数组的有序部分

C# mongodb 2.0 Find and project ordered part of an array

我有以下代码块:

var r = this.collections.competitions.Find(filter)
                                             .Project(x => x.TeamRanks)
                                             .Project(t => t.Logo)
                                             .Sort(sort)
                                             .Skip(prev)
                                             .Limit(count)
                                             .Single();

我有这个 Competition 集合,其中有 3 个字段

Class Competition {
           public ObjectId _Id;
           public string Logo;
           public List<string> TeamRanks
}

这里的过滤器在 Competition._Id 上。 我想按排名升序获得徽标和排名前 5 的球队。(由 count 值给出) 该列表可能很大,所以我想在这里使用 Project(或使用 Fields 的替代解决方案),但它似乎无法工作。 问题:

1。 r 是类型 string,它是第二个 Project 并且忽略了 TeamRanks。

2。 我怎样才能按升序只获得排名前 5 的球队?

TIA。

编辑

我刚刚注意到整个排序、跳过和限制都是在比赛中完成的,我当然希望将其应用于 TeamRanks。 因此,例如,如果该方法接收到 count = 7 和一些 competitionId,则该方法需要 return 具有提供的 id 的比赛,并在其中排名前 7 的球队..

ObjectId _idFilter = new ObjectId();//you set your _Id filter to whatever you need
Competition _theCompetition = await __db.GetCollection<Competition>("Competiton")
    .Find(Builders<Competition>.Filter.Eq("_Id", _idFilter)).SingleAsync();
int _count = 5; //your chosen count
List<string> _orderedList = _theCompetition.TeamRanks
    .OrderBy(teamRank => teamRank).Take(_count).ToList();

编辑
下面是获取返回文档中 TeamRanks 数组前五个元素的代码

var __projection = Builders<Competition>.Projection;
var _theCompetition = await __db.GetCollection<Competition>("Competiton")
.Find(Builders<Competition>.Filter.Eq("_id", _idFilter))                  
.Project(__projection.Include(x=>x.Logo).Include(x=>x.TeamRanks).Slice("TeamRanks", 5))
.SingleAsync();