문서 메뉴

문서 홈애플리케이션 개발MongoDB 매뉴얼

$addFields (aggregation)

이 페이지의 내용

  • 정의
  • 호환성
  • 구문
  • 행동
  • 예제
$addFields

문서에 새 필드를 추가합니다. $addFields 입력 문서의 기존 필드와 새로 추가된 필드를 모두 포함하는 문서를 출력합니다.

$addFields 단계는 입력 문서의 모든 기존 필드를 명시적으로 지정하고 새 필드를 추가하는 $project 단계와 동일합니다.

참고

버전 부터 4 시작됩니다.2, MongoDB는 의 별칭인 새로운 집계 파이프라인 단계 를 $set $addFields추가합니다.

다음 환경에서 호스팅되는 배포에 $addFields 사용할 수 있습니다.

  • MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스

이 단계에는 다음 구문이 있습니다.

{ $addFields: { <newField>: <expression>, ... } }

추가할 각 필드의 이름을 설정하고 해당 값을 애그리게이션 표현식 또는 빈 객체에 설정합니다. 표현식에 대한 자세한 내용은 표현식 연산자를 참조하세요.

중요

새 필드의 이름이 기존 필드 이름( _id 포함)과 동일한 경우 $addFields 해당 필드의 기존 값을 지정된 표현식의 값으로 덮어씁니다.

  • $addFields 기존 문서에 새 필드를 추가합니다. 애그리게이션 연산에 $addFields 단계를 1개 이상 포함시킬 수 있습니다.

  • $addFields 집계 표현식이나 빈 개체에 값을 설정할 수 있는 개체 포함을 허용합니다. 예를 들어 다음과 같은 중첩 개체가 허용됩니다:

    {$addFields: { a: { b: { } } } }

    내장된 문서(배열의 문서 포함)에 필드를 추가하려면 점 표기법을 사용합니다. 예제를 참조하세요.

  • $addFields 을 사용하여 기존 배열 필드에 요소를 추가하려면 $concatArrays 와 함께 사용합니다. 예제를 참조하세요.

컬렉션 scores에는 다음 문서가 포함되어 있습니다.

db.scores.insertMany( [
{
_id: 1,
student: "Maya",
homework: [ 10, 5, 10 ],
quiz: [ 10, 8 ],
extraCredit: 0
},
{
_id: 2,
student: "Ryan",
homework: [ 5, 6, 5 ],
quiz: [ 8, 8 ],
extraCredit: 8
}
] )

다음 작업은 두 개의 $addFields 단계를 사용하여 출력 문서에 세 개의 새 필드를 포함합니다.

db.scores.aggregate( [
{
$addFields: {
totalHomework: { $sum: "$homework" } ,
totalQuiz: { $sum: "$quiz" }
}
},
{
$addFields: { totalScore:
{ $add: [ "$totalHomework", "$totalQuiz", "$extraCredit" ] } }
}
] )

이 작업은 다음 문서를 반환합니다.

[
{
_id: 1,
student: "Maya",
homework: [ 10, 5, 10 ],
quiz: [ 10, 8 ],
extraCredit: 0,
totalHomework: 25,
totalQuiz: 18,
totalScore: 43
},
{
_id: 2,
student: "Ryan",
homework: [ 5, 6, 5 ],
quiz: [ 8, 8 ],
extraCredit: 8,
totalHomework: 16,
totalQuiz: 16,
totalScore: 40
}
]

점 표기법을 사용하여 임베디드 문서에 새 필드를 추가할 수 있습니다.

그 예로 다음 문서를 사용하여 vehicles(이)라는 컬렉션을 생성하세요.

db.vehicles.insertMany( [
{ _id: 1, type: "car", specs: { doors: 4, wheels: 4 } },
{ _id: 2, type: "motorcycle", specs: { doors: 0, wheels: 2 } },
{ _id: 3, type: "jet ski" }
] )

다음 집계 작업은 포함된 문서 specs 에 새 필드 fuel_type 를 추가합니다.

db.vehicles.aggregate( [
{ $addFields: { "specs.fuel_type": "unleaded" } }
] )

이 연산은 다음과 같은 결과를 반환합니다.

[
{ _id: 1, type: "car",
specs: { doors: 4, wheels: 4, fuel_type: "unleaded" } },
{ _id: 2, type: "motorcycle",
specs: { doors: 0, wheels: 2, fuel_type: "unleaded" } },
{ _id: 3, type: "jet ski",
specs: { fuel_type: "unleaded" } }
]

$addFields 연산에서 기존 필드 이름을 지정하면 원래의 필드가 대체됩니다.

animals 컬렉션에는 다음 문서가 포함되어 있습니다.

db.animals.insertOne(
{ _id: 1, dogs: 10, cats: 15 }
)

다음 $addFields 연산은 cats 필드를 지정합니다.

db.animals.aggregate( [
{
$addFields: { cats: 20 }
}
] )

연산은 다음 문서를 반환합니다.

[ { _id: 1, dogs: 10, cats: 20 } ]

한 필드를 다른 필드로 바꿀 수 있습니다. 다음 예제에서는 item 필드가 _id 필드를 대체합니다.

컬렉션 fruit에는 다음 문서가 포함되어 있습니다.

db.fruit.insertMany( [
{ _id: 1, item: "tangerine", type: "citrus" },
{ _id: 2, item: "lemon", type: "citrus" },
{ _id: 3, item: "grapefruit", type: "citrus" }
] )

다음 애그리게이션 연산에서는 $addFields을(를) 사용하여 각 문서의 _id 필드를 item 필드의 값으로 바꾸고, item 필드를 정적 값으로 바꿉니다.

db.fruit.aggregate( [
{
$addFields: {
_id : "$item",
item: "fruit"
}
}
] )

이 연산은 다음을 반환합니다:

[
{ _id: "tangerine", item: "fruit", type: "citrus" },
{ _id: "lemon", item: "fruit", type: "citrus" },
{ _id: "grapefruit", item: "fruit", type: "citrus" }
]

다음을 사용하여 샘플 scores 컬렉션을 만듭니다:

db.scores.insertMany( [
{ _id: 1, student: "Maya", homework: [ 10, 5, 10 ], quiz: [ 10, 8 ], extraCredit: 0 },
{ _id: 2, student: "Ryan", homework: [ 5, 6, 5 ], quiz: [ 8, 8 ], extraCredit: 8 }
] )

$addFields$concatArrays 표현식과 함께 사용하여 기존 배열 필드에 요소를 추가할 수 있습니다. 예를 들어, 다음 작업은 $addFields 을 사용하여 homework 필드를 현재 homework 배열과 새 점수 [ 7 ] 가 포함된 다른 배열이 연결된 새 배열의 요소로 바꿉니다.

db.scores.aggregate( [
{ $match: { _id: 1 } },
{ $addFields: { homework: { $concatArrays: [ "$homework", [ 7 ] ] } } }
] )

이 연산은 다음을 반환합니다:

[ { _id: 1, student: "Maya", homework: [ 10, 5, 10, 7 ], quiz: [ 10, 8 ], extraCredit: 0 } ]
← 애그리게이션 단계

이 페이지의 내용