2017-01-26 1 views
1

안녕하세요 ravendb 인덱스에 문제가 있습니다.ravendb 인덱스 문제

코드로 설명하고 싶습니다.

class John 
{ 
    public string Name { get; set; } 
    public IList<int> Cats { get; set; } 
} 

class John2 
{ 
    public string Name { get; set; } 
    public int Cat { get; set; } 
} 

그들은 각각 ravendb에서 문서 유형을 나타냅니다

나는이 2 개 개의 클래스가 있습니다.

색인을 만들고 싶습니다. 이 인덱스는 John 유형의 Object의 Cats 목록에있는 항목만큼 많은 John2 of Objects를 제공해야합니다.

var res = john.Cats.Select(x => new John2 {Name = "john", Cat = x}); 

변수 고해상도은 자신과 형 John2의 두 항목이 각각 포함됩니다 :

var john = new John 
{ 
    Name = "test", 
    Cats = new List<int> { 12,13} 
}; 

그럼 내가 다음을 수행 인덱스를 원하는 :

그래서 내가 이것을 가지고 말할 수 고양이. John2 항목의 수는 개체 John의 Cats 목록에있는 Cats 수에 따라 다릅니다.

우선 나는 ravendb와 색인에 완전히 새로운 있습니다. 그래서 이런 일이 가능하다면 나는 모른다.

레이븐 색인을 사용하여 위의 기능을 달성하는 방법에 대한 제안이 있습니까?

답변

2

데이터 프로젝션을 원할 경우 Transformers을 사용할 수 있습니다.

public class John2Transformer : AbstractTransformerCreationTask<John> 
{ 
     public John2Transformer() 
     { 
      TransformResults = johns => from john in johns 
             from cat in john.Cats 
             select new 
             { 
              Name = john.Name, 
              Cat = cat 
             }; 
     } 
} 

검색어 : 서버에 사용자의 변압기를 설치해야합니다

IList<John2> res = session.Query<John>() 
     .TransformWith<John2Transformer, John2>() 
     .ToList(); 
+1

참고. 예를 들어 앱 시작 코드에서'new John2Transformer(). Execute (docStore); '와 같은 코드를 추가 할 수 있습니다. –

+1

감사합니다. @ judah 예, 그 정보를 주셔서 감사합니다 :) – Diemauerdk