我们正在Raven中存储一组文档。如何在RavenDB中创建具有多个分组的地图/缩小索引
public class MyDocument
{
public string Id { get; set; }
public string DocumentType { get; set; }
public int ClientId { get; set; }
public string Status { get; set; }
}
我们希望显示由客户端Id和DocumentType都分组文件的报告,以便看起来像:
DocumentType ClientHasManyOfThese Count Action ------------- -------------------- ----- --------------------- DocumentType1 Yes 10 LinkToListOfDocuments DocumentType1 No 5 LinkToListOfDocuments DocumentType2 Yes 12 LinkToListOfDocuments DocumentType2 No 15 LinkToListOfDocuments
我创建了以下索引但它只返回正确的结果少量的文件。
public class MyDocumentCount
{
public string DocumentType { get; set; }
public int ClientId { get; set; }
public int Count { get; set; }
public bool MultipleDocumentsForClient { get; set; }
}
public class MyIndex : AbstractIndexCreationTask<MyDocument, MyDocumentCount>
{
public MyIndex()
{
Map = tasks =>
from task in tasks
where task.Status = "Show In Report"
select new MyDocumentCount
{
DocumentType = task.DocumentType,
ClientId = task.ClientId,
MultipleDocumentsForClient = false,
Count = 1
};
Reduce = results =>
results.GroupBy(result => new
{
result.DocumentType,
result.ClientId
}).Select(conDocGrp => new MyDocumentCount
{
DocumentType = conDocGrp.Key.DocumentType,
Count = conDocGrp.Sum(result => result.Count),
MultipleDocumentsForClient = conDocGrp.Sum(result => result.Count) > 1,
ClientId = conDocGrp.Key.ClientId
});
TransformResults = (database, results) =>
results.GroupBy(result => new
{
result.DocumentType,
result.MultipleDocumentsForClient
}).Select(multDocGrp => new
{
multDocGrp.Key.DocumentType,
multDocGrp.Key.MultipleDocumentsForClient,
Count = multDocGrp.Sum(result => int.Parse(result.Count.ToString(CultureInfo.InvariantCulture))),
ClientId = 0
});
}
}
我相信它在调用的时候有事情做与掠夺的结果次数限制:
var results = session.Query<MyDocumentCount, MyIndex>().ToList();
也许限制进行变换前应用于索引的结果?
有谁能告诉我我做错了什么,如果有办法实现我想要的吗?
我们目前正在运行RavenDB(Server Build 2380)。
谢谢。
你为什么要将_int_转换成_string_,然后再转换成_int_? 'int.Parse(result.Count.ToString(CultureInfo.InvariantCulture))' – fgauna 2015-02-12 00:14:12
我不完全明白你想要做什么。你为什么在你的例子中为DocumentType2的Count ='5'和ClientHasManyOfThese =否,当你的索引中的MultipleDocumentsForClient为真时,当它超过1时。 – fgauna 2015-02-12 00:40:35
对不起int.Parse(....)我真的不记得了这背后的推理。我从代码库中提取了这段代码,我认为在解决这个问题的背景中存在一些奇怪的事情。它看起来更简单,因为Count = multDocGrp.Sum(result => result.Count) – zonkflut 2015-02-12 05:15:08