C# 基于搜索使用C驱动程序获取MongoDB集合的子集合
我有这个项目 我有以下几个类,其中playerrakhistory保存在MongoDB中,其中包含playerrakhistoryseasontry的列表,每个列表都包含playerrakhistoryplot 然后,我想提供一封球员的电子邮件和一个赛季名称,然后只将PlayerHistoryPlots列表作为一个列表输出,但是我编写的代码非常慢,而且不比只提供一封电子邮件和获取更多数据快 顺便说一下,我不知道如何编写它以使其异步 我现在的问题是C# 基于搜索使用C驱动程序获取MongoDB集合的子集合,c#,mongodb,C#,Mongodb,我有这个项目 我有以下几个类,其中playerrakhistory保存在MongoDB中,其中包含playerrakhistoryseasontry的列表,每个列表都包含playerrakhistoryplot 然后,我想提供一封球员的电子邮件和一个赛季名称,然后只将PlayerHistoryPlots列表作为一个列表输出,但是我编写的代码非常慢,而且不比只提供一封电子邮件和获取更多数据快 顺便说一下,我不知道如何编写它以使其异步 我现在的问题是 public async Task<Lis
public async Task<List<PlayerRankHistoryPlot>> GetPlayerRankEntries(string email, string seasonName)
{
var query = Collection.AsQueryable().SingleOrDefault(x => x.Email == email)
.PlayerRankHistorySeasonEntries.SingleOrDefault(x => x.SeasonName == seasonName).HistoryPlots;
List<PlayerRankHistoryPlot> result = query.ToList();
return result;
}
public class PlayerRankHistory
{
public PlayerRankHistory(string email)
{
Email = email;
PlayerRankHistorySeasonEntries = new List<PlayerRankHistorySeasonEntry>();
}
public Guid Id { get; set; }
public string Email { get; set; }
public List<PlayerRankHistorySeasonEntry> PlayerRankHistorySeasonEntries { get; set; }
}
public class PlayerRankHistorySeasonEntry
{
public PlayerRankHistorySeasonEntry(string seasonName)
{
SeasonName = seasonName;
HistoryPlots = new List<PlayerRankHistoryPlot>();
}
public string SeasonName { get; set; }
public List<PlayerRankHistoryPlot> HistoryPlots { get; set; }
}
public class PlayerRankHistoryPlot
{
public PlayerRankHistoryPlot(DateTime date, int rank, int eloRating)
{
Date = date;
Rank = rank;
EloRating = eloRating;
}
public DateTime Date { get; set; }
public int Rank { get; set; }
public int EloRating { get; set; }
}
我相信,当您定义Collection.AsQueryable.FirstOrDefault时,您正在提取该集合中的所有记录,然后对它们进行过滤。您应该使用MongoDB C驱动程序提供的Find方法来过滤记录,这也要快得多
根据电子邮件地址获取PlayerAnkhistory对象
从筛选的记录中,仅返回具有所需季节的记录
仅获取第一个匹配项列表的HostyPlots
是的,我想它能把所有东西都拿来。如果select似乎不起作用,我得到的“IFindFluent”不包含“select”的定义,并且没有可访问的扩展方法“select”接受类型为“IFindFluent”的第一个参数
{"_id":"AYU3e3Qgw0Gut1fngze80g==","Email":"someemail@gmail.com","PlayerRankHistorySeasonEntries":[{"SeasonName":"Season 1","HistoryPlots":[{"Date":"2020-01-10T12:24:12.511Z","Rank":11,"EloRating":1488},{"Date":"2020-01-13T12:51:41.597Z","Rank":12,"EloRating":1488},{"Date":"2020-01-15T11:11:43.223Z","Rank":10,"EloRating":1510},{"Date":"2020-01-15T11:11:45.049Z","Rank":8,"EloRating":1530},{"Date":"2020-01-15T12:14:58.042Z","Rank":9,"EloRating":1530},{"Date":"2020-01-15T12:14:59.886Z","Rank":8,"EloRating":1530}]}]}
Collection.Find(Builders<PlayerRankHistory>.Filter.Eq(x => x.Email, email))
.Select(y => y.PlayerRankHistorySeasonEntries.Where(z => z.SeasonName.Equals(seasonName)))
.FirstOrDefault()?.HistoryPlots
.ToList();