map (집계)
정의
$map
배열의 각 항목에 표현식을 적용하고 결과가 적용된 배열을 반환합니다.
호환성
다음 환경에서 호스팅되는 배포에 $map
사용할 수 있습니다.
MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스
MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전
MongoDB Community: MongoDB의 소스 사용 가능 무료 자체 관리 버전
구문
$map
표현식의 구문은 다음과 같습니다.
{ $map: { input: <expression>, as: <string>, in: <expression> } }
필드 | 사양 |
---|---|
input | 배열로 해석되는 표현식 입니다.
|
as | |
in |
표현식에 대한 자세한 내용은 표현식 연산자를 참조하세요.
예시
배열의 각 요소에 추가
mongosh
에서 다음 문서를 사용하여 grades
라는 이름의 샘플 컬렉션을 만듭니다.
db.grades.insertMany( [ { quizzes: [ 5, 6, 7 ] }, { quizzes: [ ] }, { quizzes: [ 3, 8, 9 ] } ] )
다음 집계 작업은 $map
을 $add
표현식과 함께 사용하여 quizzes
배열의 각 요소를 2
씩 증가시킵니다.
db.grades.aggregate( [ { $project: { adjustedGrades: { $map: { input: "$quizzes", as: "grade", in: { $add: [ "$$grade", 2 ] } } } } } ] )
이 연산은 다음과 같은 결과를 반환합니다.
[ { _id: ObjectId("6390b8f7237da390c6869a62"), adjustedGrades: [ 7, 8, 9 ] }, { _id: ObjectId("6390b8f7237da390c6869a63"), adjustedGrades: [] }, { _id: ObjectId("6390b8f7237da390c6869a64"), adjustedGrades: [ 5, 10, 11 ] } ]
각 배열 요소 잘라내기
mongosh
에서 다음 문서를 사용하여 deliveries
라는 이름의 샘플 컬렉션을 만듭니다.
db.deliveries.insertMany( [ { "city" : "Bakersfield", "distances" : [ 34.57, 81.96, 44.24 ] }, { "city" : "Barstow", "distances" : [ 73.28, 9.67, 124.36 ] }, { "city" : "San Bernadino", "distances" : [ 16.04, 3.25, 6.82 ] } ] )
다음 집계 작업은 $map
을 사용하여 distances
배열의 각 요소를 정수로 truncate
처리합니다.
db.deliveries.aggregate( [ { $project: { city: "$city", integerValues: { $map: { input: "$distances", as: "decimalValue", in: { $trunc: "$$decimalValue" } } } } } ] )
이 연산은 다음과 같은 결과를 반환합니다.
[ { _id: ObjectId("6390b9b1237da390c6869a65"), city: 'Bakersfield', integerValues: [ 34, 81, 44 ] }, { _id: ObjectId("6390b9b1237da390c6869a66"), city: 'Barstow', integerValues: [ 73, 9, 124 ] }, { _id: ObjectId("6390b9b1237da390c6869a67"), city: 'San Bernadino', integerValues: [ 16, 3, 6 ] } ]
섭씨 온도를 화씨로 변환하기
mongosh
에서 다음 문서를 사용하여 temperatures
라는 이름의 샘플 컬렉션을 만듭니다.
db.temperatures.insertMany( [ { "date" : ISODate("2019-06-23"), "tempsC" : [ 4, 12, 17 ] }, { "date" : ISODate("2019-07-07"), "tempsC" : [ 14, 24, 11 ] }, { "date" : ISODate("2019-10-30"), "tempsC" : [ 18, 6, 8 ] } ] )
다음 집계 작업에서는 $addFields
단계를 사용하여 tempsF
문서에 tempsC
배열의 요소에 해당하는 화씨 값을 포함하는 새 필드를 추가합니다. 섭씨에서 화씨로 변환하려면 $map
을 사용하여 섭씨 값을 $multiply
로 9/5
한 다음 32
를 $add
합니다.
db.temperatures.aggregate( [ { $addFields: { "tempsF": { $map: { input: "$tempsC", as: "tempInCelsius", in: { $add: [ { $multiply: [ "$$tempInCelsius", 9/5 ] }, 32 ] } } } } } ] )
이 연산은 다음과 같은 결과를 반환합니다.
[ { _id: ObjectId("6390ba11237da390c6869a68"), date: ISODate("2019-06-23T00:00:00.000Z"), tempsC: [ 4, 12, 17 ], tempsF: [ 39.2, 53.6, 62.6 ] }, { _id: ObjectId("6390ba11237da390c6869a69"), date: ISODate("2019-07-07T00:00:00.000Z"), tempsC: [ 14, 24, 11 ], tempsF: [ 57.2, 75.2, 51.8 ] }, { _id: ObjectId("6390ba11237da390c6869a6a"), date: ISODate("2019-10-30T00:00:00.000Z"), tempsC: [ 18, 6, 8 ], tempsF: [ 64.4, 42.8, 46.4 ] } ]
자세히 알아보기
이전 예시에서 사용된 표현식에 대해 자세히 알아보려면 다음을 참조하세요.