【发布时间】:2012-03-14 03:11:28
【问题描述】:
首先,我刚刚开始使用 RavenDB,所以请耐心等待我解释这个问题。我正在尝试创建我的第一个地图、地图、减少、转换索引。是的,我知道我正在尝试做很多事情,但我已经完成了大部分工作。
首先我在 global.asax 中执行此操作,以确保所有“ID”属性都用作文档的标识符。
_documentStore.Conventions.FindIdentityProperty = p => p.Name == "ID";
好的,现在让我们看看索引。
public class ProblemListViewIndex : AbstractMultiMapIndexCreationTask<ProblemListView>
{
public ProblemListViewIndex()
{
AddMap<Problem>(problems => from problem in problems
select new
{
ID = problem.ID,
SolutionCount = 0,
});
AddMap<Solution>(solutions => from solution in solutions
select new
{
ID = solution.ProblemID,
SolutionCount = 1,
});
Reduce = results => from result in results
group result by result.ID
into g
select new
{
ID = g.Key,
SolutionCount = g.Sum(x => x.SolutionCount),
};
Indexes.Add(x => x.ID, FieldIndexing.Analyzed);
TransformResults = (database, results) => from result in results
let problem = database.Load<Problem>("problems/" + result.ID.ToString())
let user = database.Load<User>("users/" + problem.PostedByID.ToString())
select new
{
ID = result.ID,
PostedByID = problem.PostedByID,
PostedByName = user.DisplayName,
SolutionCount = result.SolutionCount,
};
}
}
所以一切看起来都不错,当我在 RavenDB 网站上测试索引时,我得到了好坏参半的结果。我有重复的预测。我有我期望的两个预测,但有两个副本。以下是投影结果中“ID”的样子。
- 问题/194
- 问题/195
- 194
- 195
我很困惑,但后来我回去查看了“地图”。我的代码在创建的索引中翻译成不同的东西。这是最初创建第一张地图时的样子。
docs.Problems
.Select(problem => new {ID = problem.__document_id, SolutionCount = 0})
即使是 RavenDB 的新手,我也看到了问题。当我想使用“ID”字段时,它正在使用“__document_id”字段。我更改了地图,然后将索引保存到以下内容。
docs.Problems
.Select(problem => new {ID = problem.ID, SolutionCount = 0})
一旦我这样做了,我的投影就会完全符合我的预期和我想要的样子。
- 194
- 195
我的问题是我需要在我的代码中做什么才能使用“ID”而不是“__document_id”来创建索引?
【问题讨论】: