gpt4 book ai didi

c# - 如何在 RavenDB 的索引上使用 GroupBy?

转载 作者:行者123 更新时间:2023-12-02 20:06:29 24 4
gpt4 key购买 nike

我有这个文件,一个帖子:

{内容:“blabla”,标签:[“test”,“toto”],创建时间:“2019-05-01 01:02:01”}

我想要一个页面来显示自过去 30 天以来最常用的标签。

到目前为止,我尝试创建这样的索引

 public class Toss_TagPerDay : AbstractIndexCreationTask<TossEntity, TagByDayIndex>
{
public Toss_TagPerDay()
{

Map = tosses => from toss in tosses
from tag in toss.Tags
select new TagByDayIndex()
{
Tag = tag,
CreatedOn = toss.CreatedOn.Date,
Count = 1
};
Reduce = results => from result in results
group result by new { result.Tag, result.CreatedOn }
into g
select new TagByDayIndex()
{
Tag = g.Key.Tag,
CreatedOn = g.Key.CreatedOn,
Count = g.Sum(i => i.Count)
};
}
}

然后我就这样查询了

 await _session
.Query<TagByDayIndex, Toss_TagPerDay>()
.Where(i => i.CreatedOn >= firstDay)
.GroupBy(i => i.Tag)
.OrderByDescending(g => g.Sum(i => i.Count))
.Take(50)
.Select(t => new BestTagsResult()
{
CountLastMonth = t.Count(),
Tag = t.Key
})
.ToListAsync()

但这给了我错误

Message: System.NotSupportedException : Could not understand expression: from index 'Toss/TagPerDay'.Where(i => (Convert(i.CreatedOn, DateTimeOffset) >= value(Toss.Server.Models.Tosses.BestTagsQueryHandler+<>c__DisplayClass3_0).firstDay)).GroupBy(i => i.Tag).OrderByDescending(g => g.Sum(i => i.Count)).Take(50).Select(t => new BestTagsResult() {CountLastMonth = t.Count(), Tag = t.Key}) ---- System.NotSupportedException : GroupBy method is only supported in dynamic map-reduce queries

知道如何让这项工作成功吗?我可以查询过去 30 天的所有索引数据并执行 groupby/order/take 内存,但这可能会使我的应用程序加载大量数据。

最佳答案

您创建的 map-reduce 索引的结果将为您提供每天的标签数量。您想要拥有过去 30 天内最受欢迎的商品,因此您需要执行以下查询:

var tagCountPerDay = session
.Query<TagByDayIndex, Toss_TagPerDay>()
.Where(i => i.CreatedOn >= DateTime.Now.AddDays(-30))
.ToList();

然后你可以在客户端按标签分组:

var mostUsedTags = tagCountPerDay.GroupBy(x => x.Tag)
.Select(t => new BestTagsResult()
{
CountLastMonth = t.Count(),
Tag = t.Key
})
.OrderByDescending(g => g.CountLastMonth)
.ToList();

关于c# - 如何在 RavenDB 的索引上使用 GroupBy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54543871/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com