2016-12-16 1 views
0

다음과 같습니다. 목록의 첫 번째 요소 만 반환하는 투영법을 사용하여 MongoDB에서 문서를 가져와야합니다. . 그러나이 목록은 다른 목록 안에 있으며이 목록은 문서 안의 다른 개체 안에있는 개체 안에 있습니다. 그것은 다음과 같습니다MongoDB : 객체에 중첩 된 다른 배열에 중첩 된 배열의 첫 번째 요소를 반환하는 프로젝션 만들기

{ 
    "items": { 
    "item": [ 
     { 
     "items": { 
      "item": [ 
      { 
       "cell": [ 
       { 
        "value": "a" 
       }, 
       { 
        "value": "b" 
       }, 
       { 
        "value": "c" 
       } 
       ] 
      } 
      ] 
     } 
     } 
    ] 
    } 
} 

내 목표는 값을 가져올 수 있습니다 : "A"을 다른 값을 피하기 위해 프로젝션을 사용. ': 나는 $ elemMatch은 $ 및 $ 슬라이스 그냥이 첫 번째 요소를 반환하는 데 사용했지만, 내가 할 수있는 내가 아는 이미 시도 다했습니다'문제는 I가

{ 
    "items": { 
    "item": [ 
     { 
     "items": { 
      "item": [ 
      { 
       "cell": [ 
       { 
        "value": "a" 
       } 
       ] 
      } 
      ] 
     } 
     } 
    ] 
    } 
} 

을 : 즉, 내 프로젝션이 반환해야한다 문서의 복잡성 때문에 쿼리를 수행 할 필요가 없습니다. 나는 MongoDB 3.2를 사용하고있다.

추가 정보가 필요하면 여기에서 업데이트하십시오. 어쨌든, 모두 감사합니다!

답변

1

다음과 같이 시도해 볼 수 있습니다. 구조를 유지하고 $slice가 제 1 값을 선택하는 데 사용하면서 $map 연산자의 사용은 셀 어레이에 도달 할 수있다.

aggregate({ 
    $project: { 
     items: { 
      item: { 
       $map: { 
        input: "$items.item", 
        as: "outer", 
        in: { 
         "items": { 
          item: { 
           $map: { 
            input: "$$outer.items.item", 
            as: "inner", 
            in: { 
             "cell": { 
              $slice: ["$$inner.cell", 1] 
             } 
            } 
           } 
          } 
         } 
        } 
       } 
      } 
     }, 
     _id: 0 
    } 
}) 
+0

정확히 내가 필요로하는 것. 고맙습니다! –

관련 문제