刚学习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:不支持节点:调用
我觉得我很亲密。有什么帮助吗?
答案 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()