MongoDB : 객체에 중첩 된 다른 배열에 중첩 된 배열의 첫 번째 요소 만 반환하도록 투영을 만듭니다.

윌리엄 살레르노

다음이 있습니다. 목록의 첫 번째 요소 만 반환하는 프로젝션을 사용하여 MongoDB에서 문서를 검색해야합니다. 그러나이 목록은 다른 목록 안에 있고이 목록은 문서의 다른 개체 안에있는 개체 내부에 있습니다. 다음과 같이 보입니다.

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

내 목표는 다른 값을 피하기 위해 프로젝션을 사용하여 "a"값 으로 가져 오는 것 입니다. 즉, 내 투영은 다음을 반환해야합니다.

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

문제는 내가 아는 모든 것을 이미 시도했다는 것입니다. $ elemMatch, $ 및 $ slice를 사용하여이 첫 번째 요소 만 반환했지만 문서의 복잡성으로 인해 쿼리를 수행 할 수 없습니다. MongoDB 3.2를 사용하고 있습니다.

더 많은 정보가 필요하면 여기에서 업데이트합니다. 어쨌든 여러분 감사합니다!

s7vr

아래와 같이 시도 할 수 있습니다. 차종은의 사용 $ 맵 구조를 유지하고 사용하는 반면 셀 어레이에 도달하는 사업자 $ 슬라이스를 첫 번째 값을 선택 할 수 있습니다.

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
    }
})

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관