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();
我有以下代码块:
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();