我們正在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