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

时间:2011-07-28 03:21:07

标签: c# mapreduce ravendb

刚学习Map / Reduce,我错过了一步。我已经阅读过这篇文章(RavenDB Map-Reduce Example using .NET Client),但不能完全跳到我需要的地方。

我有一个对象:

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,而用户2有收藏夹1,2,那么这应该返回{{OilId = 3,Count = 1},{OilId = 2,Count = 2}, {OilId = 1,Count = 2}}

当前代码产生异常:System.NotSupportedException:不支持节点:调用

我觉得我很亲密。有什么帮助吗?

2 个答案:

答案 0 :(得分:4)

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

  

收藏:1,数:2

     

收藏:2,数:2

     

收藏:3,数:1

这就是我所期望的。

答案 1 :(得分:3)

MBonig, Map / Reduce仅对在文档中进行聚合有用。对于这样的事情,你可以通过以下方式获得更好的服务:

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