RavenDB Map/Reduce over属性是一个列表

本文关键字:一个 列表 Map Reduce over 属性 RavenDB | 更新日期: 2023-09-27 18:03:40

刚刚学习Map/Reduce,我错过了一个步骤。我读过这篇文章(RavenDB Map-Reduce示例使用。net客户端),但不能完全跳转到我需要的。

我有一个对象:

public class User : IIdentifiable
{
    public User(string username)
    {
        Id = String.Format(@"users/{0}", username);
        Favorites = new List<string>();
    }
    public IList<string> Favorites { get; protected set; }
    public string Id { get; set; }
}

我想做的是获取Map/Reduce所有用户的收藏夹属性。像这样(但这显然不起作用):

 Map = users => from user in users
                from oil in user.Favorites
                select new { OilId = oil, Count = 1 };
 Reduce = results => from result in results
                     group result by result.OilId into g
                     select new { OilId = g.Key, Count = g.Sum(x => x.Count) };

例如,如果User1有收藏夹1、2、3,user2有收藏夹1、2,那么这应该返回{{OilId=3, Count =1}, {OilId=2, Count =2}, {OilId=1,Count =2}}

当前代码产生一个异常:System。NotSupportedException: Node not supported: Call

我觉得我已经很接近了。任何帮助吗?

RavenDB Map/Reduce over属性是一个列表

我编写了一个复制您的代码的小应用程序,但我没有看到抛出异常。在这里查看我的代码:http://pastie.org/2308175。输出为

收藏:1,计数:2

Favorite: 2, Count: 2

收藏:3,计数:1

Map/Reduce只对跨文档进行聚合有用。对于这样的事情,您可以这样做:

  session.Query<User>().Select(u=>u.Favorites).ToList()