2012-03-06 4 views
2

에 조건이 theese 객체가 있습니다 : 내가 사용RavenDB - 포함 개체

public class Obj1 
{ 
    public string Id { get; set; } 
} 

public class Obj2 
{ 
    public string Id { get; set; } 
    public string Obj1Id { get; set; } 
} 

public class Obj3 
{ 
    public string Id { get; set; } 
    public string Obj2Id { get; set; } 
} 

는 다음과 같습니다

var objs3 = session.Query<Obj3>() 
    .Customize(x => x.Include<Obj3>(o3 => o3.Obj2Id)) 
    .Take(1000) 
    .ToList(); 
foreach (var obj3 in objs3) 
{ 
    var obj2 = session.Load<Obj2>(obj3.Obj2Id); 
    //do something with it 
} 

내 질문은 어디에요 같은 것을 쿼리에 추가 할 가능성이 (o2 => o2.Obj1Id == "some/Id")? 쿼리는 클라이언트 (Linq) 측에서 Obj2에 대해 아무 것도 모릅니다. 그러나 DB 측에 한 번만 요청하기 때문에 서버 측에서도이를 사용합니다.

나는 인덱스와 투영법을 연구하는 방법을 시도하지만, 어떤 구조에서는 운이 없다. 어쩌면 내 관점 관계형 데이터베이스에서 변형 된 내 구조를 다시 정의해야하는 다른 솔루션이 있습니다 ...

내 다른 솔루션 Obj3 추가 할 수 있지만 Obj1Id 추가 할 것입니다 duplicites 수 있습니다.))

개체에 대한 일부 추가 정보 :
- OBJ1 각 고객에 대해 고유하므로 약 200 문서
이 - obj2보다 : OBJ3가 1 : 뷰 특성의 자신의 포인트 1 형제 자매, 각각의 양에 대한 고객 당 100.000

보너스 질문 : Inclide chaining과 같은 것이 있습니까? Obj1을 포함하여 Obj1 포함? (이건 내가 사용하지 않겠다는 것입니다.)

답변

1

아니요, 포함에 조건을 추가 할 수 없습니다. 모두 완료되었거나 완료되지 않았습니다.

+0

그래서 정확하고 깨끗한 Obj1Id 복제 내 솔루션은 무엇입니까? – sasjaq

0

Oren이 말했듯이, 포함 조건에는 조건이 있습니다. 따라서 Obj2와 Obj3 모두 Obj1의 ID와 같은 공통점이있는 경우 데이터를 재구성하거나 다중 맵을 사용하여 색인을 축소 할 수 있습니다.

귀하의 경우에 어느 쪽이 더 좋은지는 현재 보유하고있는 데이터의 종류에 따라 다르며 일반적인 대답은 없습니다. (Obj1-3과 같은 추상 이름 대신 실제 클래스 이름을 사용하여 또 다른 구체적인 질문을 게시 할 수 있습니다.