2012-09-20 3 views
3

마지막 사용 및 사용 횟수에 대한 내 Sum 및 Max 호출이 잘못되었습니다. 그것들은 항상 현재 0으로 설정된 두 번째 맵 값에 저장된 값입니다. -100로 만들면 줄일 수 있습니다. 나는 당신이 그것을 배열로 만들어야한다고 말하는 누군가를 알아 차 렸지만 그것이 어떻게 도움이되는지 이해하지 못한다. 두 맵을 함께 union 가정합니다 올바르게 작동하는 map/reduce 사용하여 개체에 linq식이 있습니다. 여기 Raven DB :이 멀티 맵/축소 인덱스의 문제점은 무엇입니까?

입니다 데이터 = https://gist.github.com/940ccca1b0f8917e9eaf

내가 table

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() 
              }; 
+0

보이는 것 중 하나는 그룹 기준이 다음과 같아야한다는 것입니다. group result by new {result.AccountId, result.ApiKeyId}. 또한 결과 집합의 패턴이 전혀 아닌 이유는 무엇입니까? 또는 상태 및 유형? – eulerfx

+0

이들은 현재 장소 소유자입니다. 둘 모두로 그룹화하면 무엇을 얻을 수 있습니까? – Steve

+0

데이터 모델을 알지 못하는데도 논리적 인 것처럼 보입니다. ApiKey.ApplicationType.None은 코드에서 사용할 수있는 정적 멤버이지만 RavenDB가 인덱스로 이동하면 코드 기반을 참조하지 않고이를 처리하는 방법을 알지 못한다는 사실이 실제 원인이라고 생각합니다. 지도에서 BCL 유형 만 참조하고 선언을 줄일 수 있습니다. – eulerfx

답변

2

인덱싱 오류 sequence contains no matching elements 같은 테이블을

 var stats = Session.Query<MultiMapApiKeyStats.ApiKeyStats, MultiMapApiKeyStats>() 
      .Customize(x => x.WaitForNonStaleResultsAsOfNow()) 
      .Where(x => x.AccountId == Account.Id) 
      .OrderBy(x => x.Key).ToList(); 

같은 쿼리를 지원하고 구축하려는이의 결과이다> 빈 컬렉션에 First을 호출하여을 사용해야하는 이유입니다.. 또한지도에서 자신의 클래스를 참조하고 선언을 줄이면 RavenDB에서 색인 생성시 해당 유형을 해결할 수 없기 때문에 오류가 발생합니다.

+0

이라고 표시 하겠지만 시퀀스에 요소가없는 이유는 무엇입니까? 내 모든 문서를 무언가에 매핑하거나 패턴이 유일한 범인입니까? – Steve

+0

RavenDB가 컬렉션을 비울 수 있다고 가정하는 reduce를 수행하는 방식과 관련이있을 수 있습니다. – eulerfx