2011-03-02 4 views
0

나는이 작업이 간단해야하지만 그렇게 할 수는 없다고 느낀다 - 어떤 도움을 주시면 감사하겠습니다. LINQ와 MongoDB에 비교적 익숙합니다. (하위 문서는 임베디드와 함께, 하나 개의 문서로) 나는 MongoDB의 인스턴스를 지속하고있어 그건LINQ를 사용하여 임베디드 오브젝트 선택 (MongoDB에서)

class ParentObject 
{ 
    GUID ParentId {get;set;} 
    IList<ChildObject> ChildObjects {get;set;} 
    ...other properties 

    ParentObject() 
    { 
     childObjects = new List<ChildObject>(); 
    } 
} 

class ChildObject 
{ 
    GUID ChildId {get;set;} 
    ...other properties 
} 

:

나는 다음과 같은 두 가지 요소를 가지고있다. 내가해야 할 일은 은 ParentId와 ChildId를 사용하여 ParentObject 문서 내에 저장된 ChildObject 하위 문서 중 하나만 검색합니다. 나는 거의 내가 원하는 무엇을 다음과 같은 방법/메소드 호출을 가지고 있지만 난 단지 인덱스 (0, 1, 등)를 기반으로 IList의 또는 하나의 특정 ChildObject를 반환 할 수 있어요 :

// I know this won't work  

var parentId = (Some GUID); 
var childId = (Some GUID); 

var result = 
    SingleWithSelect<ParentObject, ChildObject> 
    (
     x => x.Id == parentId && x.ChildObjects.ChildId == ChildId, 
     y => y.ChildObject 
    ); 


public TResult SingleWithSelect<T, TResult>(
    System.Linq.Expressions.Expression<Func<T, bool>> whereExpression, 
    System.Linq.Expressions.Expression<Func<T, TResult>> selectExpression) 
    where T : class, new() 
     { 
      TResult retval = default(TResult); 
      using (var db = Mongo.Create(ConnectionString())) 
      { 
       retval = db.GetCollection<T>().AsQueryable() 
          .Where(whereExpression) 
          .Select(selectExpression) 
          .SingleOrDefault(); 
      } 
      return retval; 

     } 

많은 감사에서 어떤 도움이나 조언을 구하십시오.

- 마이크

+1

단 두 단계 : ** 1 ** ** parentId로 부모로드. ** 2. ** 부모로부터 자식 ID로 자식 가져 오기 : * parent.ChildCollection.Single (x => x.Id == childId); * –

+0

이렇게하면 작동하지만 서버 쪽에서는 더 좋을 것입니다. 지원되지 않기 때문에이 작업이 가능합니다 - 감사합니다. – Mikalee

답변

1

이것은 현재 Mongodb 자체에서 지원되지 않습니다. 일치하는 경우 일치하는 하위 문서뿐만 아니라 전체 문서가 반환됩니다. 표준이 드라이버 측면에서이 필터와 필터를 지원하는지 확실하지 않습니다. mongodb에 대한이 기능 요청에 대한 열린 JIRA 항목은 http://jira.mongodb.org/browse/SERVER-828

0

임베디드 문서를 검색하기 위해 map/reduce를 사용하십시오.

관련 문제