gpt4 book ai didi

c# - 多 map /减少在 RavenDb 中工作吗?

转载 作者:太空狗 更新时间:2023-10-30 01:24:44 25 4
gpt4 key购买 nike

我读过 Ayende 的 blog post on the multi map feature RavenDB 并试图实现它。我无法完成它。我所拥有的与博文中的示例基本相同:

class RootDocument {
public string Id { get; set; }

public string Foo { get; set; }
public string Bar { get; set; }
}

public class ChildDocument {
public string Id { get; set; }

public string RootId { get; set; }
public int Value { get; set; }
}

class RootsByIdIndex: AbstractMultiMapIndexCreationTask<RootsByIdIndex.Result> {
public class Result {
public string Id { get; set; }
public string Foo { get; set; }
public string Bar { get; set; }
public int Value { get; set; }
}

public RootsByIdIndex() {
AddMap<ChildDocument>(children => from child in children
select new {
Id = child.RootId,
Foo = (string)null,
Bar = (string)null,
Value = child.Value
});
AddMap<RootDocument>(roots => from root in roots
select new {
Id = root.Id,
Foo = root.Foo,
Bar = root.Bar,
Value = 0
});
Reduce = results => from result in results
group result by result.Id into g
select new {
Id = g.Key,
Foo = g.Select(x => x.Foo).Where(x => x != null).First(),
Bar = g.Select(x => x.Bar).Where(x => x != null).First(),
Value = g.Sum(x => x.Value)
};
}
}

查询索引总是给我 Value 属性的值 0。稍微修改一下索引,就好像 ChildDocument 的映射从未检索到任何文档。

这应该在当前稳定的 RavenDB 版本 (1.0.573) 中工作吗?还是我做错了?

最佳答案

索引的 reduce 部分在字段 Foo 和 Bar 中是错误的。

在第一个 Map 函数中,您将 Foo 和 Boo 设置为 null,因为所有 Map 函数的输出结构在 MultiMap 索引中必须完全相同。您必须使用 FirstOrDefault() 而不是 First()

Foo = g.Select(x => x.Foo).Where(x => x != null).FirstOrDefault(),
Bar = g.Select(x => x.Bar).Where(x => x != null).FirstOrDefault(),

关于c# - 多 map /减少在 RavenDb 中工作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8610243/

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