上次使用和使用次數上的我的總和和最大呼叫錯誤。它們始終是存儲在當前設置爲0的第二個映射值中的值。我可以將其設置爲-100,這就是減少結果的內容。我注意到有人說你應該讓它成爲一個數組,但我不明白這有什麼用處。我有一個linq表達式,使用map/reduce的對象來正常工作,假定兩個地圖聯合在一起。Raven DB:這個multimap/reduce索引有什麼問題?
這裏的數據=>https://gist.github.com/940ccca1b0f8917e9eaf
我想支持像
var stats = Session.Query<MultiMapApiKeyStats.ApiKeyStats, MultiMapApiKeyStats>()
.Customize(x => x.WaitForNonStaleResultsAsOfNow())
.Where(x => x.AccountId == Account.Id)
.OrderBy(x => x.Key).ToList();
查詢,並建立一個表像
public MultiMapApiKeyStats()
{
AddMap<KeyUsageBase>(uses => from use in uses
select new
{
AccountId = use.AccountId,
ApiKeyId = use.ApiKeyId,
Key = (string)null,
UsageCount = 1,
LastUsed = use.LastUsedTicks,
Pattern = (string)null,
Status = ApiKey.KeyStatus.None,
Type = ApiKey.ApplicationType.None
});
AddMap<ApiKey>(keys => from key in keys
select new
{
AccountId = key.AccountId,
ApiKeyId = key.Id,
Key = key.Key,
UsageCount = 0,
LastUsed = 0,
Pattern = key.Pattern,
Status = key.ApiKeyStatus,
Type = key.Type
});
Reduce = results => from result in results
group result by result.ApiKeyId
into g
select new
{
AccountId = g.Select(x => x.AccountId).FirstOrDefault(),
ApiKeyId = g.Key,
Key = g.Select(x => x.Key).FirstOrDefault(x => x != null),
UsageCount = g.Sum(x => x.UsageCount),
LastUsed = g.Max(x => x.LastUsed),
Pattern = g.Select(x => x.Pattern).FirstOrDefault(),
Status = g.Select(x => x.Status).FirstOrDefault(),
Type = g.Select(x => x.Type).FirstOrDefault()
};
似乎有一件事情是,group by應該是:group result by new {result.AccountId,result.ApiKeyId}。另外,爲什麼例如結果集中的模式?或狀態和類型? – eulerfx
這些是目前的佔位符。我通過兩者分組獲得了什麼? – Steve
這似乎是合乎邏輯的事情,雖然我不知道你的數據模型。我認爲實際的原因是ApiKey.ApplicationType.None是您的代碼中可用的靜態成員,但是當RavenDB進入索引時,它不會引用您的代碼庫並且不知道如何處理它。您只能在地圖中引用BCL類型並減少聲明。 – eulerfx