마지막 사용 및 사용 횟수에 대한 내 Sum 및 Max 호출이 잘못되었습니다. 그것들은 항상 현재 0으로 설정된 두 번째 맵 값에 저장된 값입니다. -100로 만들면 줄일 수 있습니다. 나는 당신이 그것을 배열로 만들어야한다고 말하는 누군가를 알아 차 렸지만 그것이 어떻게 도움이되는지 이해하지 못한다. 두 맵을 함께 union 가정합니다 올바르게 작동하는 map/reduce 사용하여 개체에 linq식이 있습니다. 여기 Raven DB :이 멀티 맵/축소 인덱스의 문제점은 무엇입니까?
입니다 데이터 = https://gist.github.com/940ccca1b0f8917e9eaf내가
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 result by new {result.AccountId, result.ApiKeyId}. 또한 결과 집합의 패턴이 전혀 아닌 이유는 무엇입니까? 또는 상태 및 유형? – eulerfx
이들은 현재 장소 소유자입니다. 둘 모두로 그룹화하면 무엇을 얻을 수 있습니까? – Steve
데이터 모델을 알지 못하는데도 논리적 인 것처럼 보입니다. ApiKey.ApplicationType.None은 코드에서 사용할 수있는 정적 멤버이지만 RavenDB가 인덱스로 이동하면 코드 기반을 참조하지 않고이를 처리하는 방법을 알지 못한다는 사실이 실제 원인이라고 생각합니다. 지도에서 BCL 유형 만 참조하고 선언을 줄일 수 있습니다. – eulerfx