2014-12-27 4 views
0

동일한 유형의 자식 인스턴스가 0 개 이상있는 트리의 노드로 작동하는 테스트 개체가 있습니다. 나는 그것을 MongoDB에서 유지하고 Morphia로 질의합니다. 끝내뿐만 아니라, 조금 놀라운MongoDB/Morphia - 재귀 객체에서 투영이 작동하지 않습니까?

{ "_id" : NumberLong(1) } 
{ "_id" : NumberLong(2) } 
{ "_id" : NumberLong(3) } 
{ "_id" : NumberLong(4) } 
{ 
     "_id" : NumberLong(5), 
     "childrenTestObjects" : [ 
       { 
         "stringValue" : "6eb887126d24e8f1cd8ad5033482c781", 
         "creationDate" : ISODate("1997-05-24T00:00:00Z") 
         "childrenTestObjects" : [ 
           { 
             "stringValue" : "2ab8f86410b4f3bdcc747699295eb5a4", 
             "creationDate" : ISODate("2024-10-10T00:00:00Z"), 
             "_id" : NumberLong(7) 
           } 
         ], 
         "_id" : NumberLong(6) 
       } 
     ] 
} 

: 결과

db.TestObject.find({}, { _id: 1, childrenTestObjects: 1 }).limit(6).sort({_id: 1 }).pretty(); 

:

나는 다음 쿼리를 수행합니다. 결과와 관련하여 두 가지 문제가 있습니다.

1) 투영을 수행 할 때 상위 요소에만 적용됩니다. 자식 요소는 여전히 투영되지 않은 다른 속성 (stringValue 및 creationDate)을 반환합니다. 필드 선택을 동일한 유형의 모든 문서 및 하위 문서에 적용하고 싶습니다. 이 트리에는 하위 항목 수가 너무 많아서 쿼리에서 명시 적으로 지정할 수 없습니다. 그것을 성취하는 방법?

2) 놀랍게도 제한이 하위 문서에 적용되었습니다. 당신은 ID가 6 인 임베디드 문서가 하나 있다는 것을 알았습니다. N 개의 하위 문서가있는 최상위 문서 6 개를 볼 것으로 예상되었지만 대신에 5 개만 있습니다. MongoDB에 임베드 된 것에 상관없이 6 개의 최상위 요소를 반환하는 방법 ? 일관된 페이지 매김 시스템이 없다면 불가능합니다.

당신의 모든 도움이 MongoDB 방법을 더 빨리 배우고 정말 고맙습니다! 감사!

답변

1

1)의 경우 영사는 결과에 필드를 유지합니다. 이 경우 필드는 childrenTestObjects이고 문서가됩니다. 그래서 mongo는 전체 필드를 반환합니다. 물론 전체 하위 문서입니다. 투영은 재귀 적이 지 않으므로 각 필드를 명시 적으로 지정해야합니다.

2)의 경우 제대로 작동하지 않습니다. 투영이 추가되지 않은 쿼리 결과 (각 반환 문서의 전체 문서)를 확인하는 데 도움이되며 여기에서 가져올 수 있습니다.

+0

진행 상황을 광범위하게 검색 한 후 테스트 데이터에 문제가 있다는 것을 깨달았습니다. 그래서 # 2는 유효한 관심사가 아닙니다. 예상대로 작동합니다. 감사!! –