필드 경로
필드 경로 표현식을 사용하여 입력 문서의 필드에 액세스 있습니다. 필드 경로 를 지정하려면 필드 이름 또는 점으로 구분된 필드 경로 ( 필드 가 내장된 문서 에 있는 경우) 앞에 달러 기호 $
를 붙입니다.
사용 사례
다음 사용 사례에 필드 경로를 사용할 수 있습니다.
중첩된 필드
다음 예시 에서는 Atlas 샘플 데이터베이스의 행성 컬렉션 을 사용합니다. 이 컬렉션 의 각 문서 는 다음과 같은 구조를 갖습니다.
{ _id: new ObjectId("6220f6b78a733c51b416c80e"), name: "Uranus", orderFromSun: 7, hasRings: true, mainAtmosphere: [ "H2", "He", "CH4" ], surfaceTemperatureC: { min: null, max: null, mean: -197.2 } }
중첩된 필드 를 필드 mean
내에 surfaceTemperatureC
지정하려면 "field.nestedField"
달러 기호 와 함께 점 표기법 ()을 $
사용합니다. 다음 집계 파이프라인 은 mean
각 문서 에 대해 중첩 필드 값만 프로젝션합니다.
db.planets.aggregate( [ { $project: { nested_field: "$surfaceTemperatureC.mean" } } ] )
다음은 반환 문서 의 예시 입니다.
{ _id: ObjectId('6220f6b78a733c51b416c80e'), nested_field: -197.2 }
중첩된 필드 배열
필드 경로 에 점 표기법 을 사용하여 배열 내에 중첩된 필드 에 액세스 .
예를 예시 instock
필드 가 포함된 products
컬렉션 을 생각해 보겠습니다. instock
필드 에는 중첩된 warehouse
필드의 배열 이 포함되어 있습니다.
db.products.insertMany( [ { item: "journal", instock: [ { warehouse: "A"}, { warehouse: "C" } ] }, { item: "notebook", instock: [ { warehouse: "C" } ] }, { item: "paper", instock: [ { warehouse: "A" }, { warehouse: "B" } ] }, { item: "planner", instock: [ { warehouse: "A" }, { warehouse: "B" } ] }, { item: "postcard", instock: [ { warehouse: "B" }, { warehouse: "C" } ] } ] )
다음 집계 파이프라인 은 $instock.warehouse
를 액세스 하여 중첩된 warehouse
필드에 액세스합니다.
db.products.aggregate( [ { $project: { item: 1, warehouses: "$instock.warehouse" } } ] )
이 예시 에서 $instock.warehouse
은 각 문서 에 대해 중첩된 warehouse
필드 에 있는 값의 배열 을 출력합니다. 파이프라인 은 다음 문서를 반환합니다.
[ { _id: ObjectId('6740b55e33b29cf6b1d884f7'), item: "journal", warehouses: [ "A", "C" ] }, { _id: ObjectId('6740b55e33b29cf6b1d884f8'), item: "notebook", warehouses: [ "C" ] }, { _id: ObjectId('6740b55e33b29cf6b1d884f9'), item: "paper", warehouses: [ "A", "B" ] }, { _id: ObjectId('6740b55e33b29cf6b1d884fa'), item: "planner", warehouses: [ "A", "B" ] }, { _id: ObjectId('6740b55e33b29cf6b1d884fb'), item: "postcard", warehouses: [ "B", "C" ] } ]
중첩된 배열의 배열
필드 경로 에 달러 기호 가 있는 점 표기법 을 사용하여 $
중첩된 배열 내의 배열 에 액세스 수도 있습니다.
이 예시 에서는 다음 문서 가 포함된 fruits
컬렉션 을 사용합니다.
db.fruits.insertOne( { _id: ObjectId("5ba53172ce6fa2fcfc58e0ac"), inventory: [ { apples: [ "macintosh", "golden delicious", ] }, { oranges: [ "mandarin", ] }, { apples: [ "braeburn", "honeycrisp", ] } ] } )
컬렉션 의 문서 에 inventory
배열 이 포함되어 있으며, 배열 의 각 요소는 중첩된 배열 필드 를 포함하는 객체 입니다.
다음 집계 파이프라인 을 고려하세요.
db.fruits.aggregate( [ { $project: { all_apples: "$inventory.apples" } } ] )
이 파이프라인 에서 $inventory.apples
은 중첩 배열의 배열 로 해석됩니다. 파이프라인 은 다음 문서 를 반환합니다.
{ _id: ObjectId('5ba53172ce6fa2fcfc58e0ac'), all_apples: [ [ "macintosh", "golden delicious" ], [ "braeburn", "honeycrisp" ] ] }
자세히 알아보기
중첩된 요소에 액세스하고 상호 작용하는 방법에 대한 자세한 내용은 점 표기법 및 내장된 문서 배열 쿼리를 참조하세요.