문서 메뉴
문서 홈
/
MongoDB 매뉴얼
/ / /

$set (aggregation)

이 페이지의 내용

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

참고

명확화

다음 페이지는 애그리게이션 단계 $set 를 나타냅니다. 업데이트 연산자 $set 에 대해서는 $set 를 참조하세요.

$set

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

$set 단계는 $addFields의 별칭입니다.

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

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

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

$set 의 형식은 다음과 같습니다.

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

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

중요

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

  • $set는 기존 문서에 새 필드를 추가합니다. 집계 연산에 하나 이상의 $set 단계를 포함할 수 있습니다.

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

    {$set: { a: { b: { } } } }

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

  • $set를 사용하여 기존 배열 필드에 요소를 추가하려면 $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 }
] )

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

db.scores.aggregate( [
{
$set: {
totalHomework: { $sum: "$homework" },
totalQuiz: { $sum: "$quiz" }
}
},
{
$set: {
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( [
{ $set: { "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" } }
]

$set 작업에서 기존 필드 이름을 지정하면 원래 필드가 대체됩니다.

다음을 사용하여 animals라는 샘플 collection을 생성합니다.

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

다음 $set 작업은 cats 필드를 재정의합니다.

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

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

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

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

다음 문서가 포함된 fruits라는 샘플 컬렉션을 만듭니다.

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

다음 애그리게이션 작업에서는 $set을(를) 사용하여 각 문서의 _id 필드를 item 필드 값으로 바꾸고, item 필드를 문자열 "fruit"(으)로 바꿉니다.

db.fruits.aggregate( [
{ $set: { _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 }
] )

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

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

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

[ { _id: 1, student: "Maya", homework: [ 10, 5, 10, 7 ], quiz: [ 10, 8 ], extraCredit: 0 } ]

다음을 사용하여 샘플 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 }
] )

다음 애그리게이션 연산은 quiz 배열의 평균을 포함하는 각 문서에 새 필드 quizAverage를 추가합니다.

db.scores.aggregate( [
{
$set: {
quizAverage: { $avg: "$quiz" }
}
}
] )

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

[
{
_id: 1,
student: 'Maya',
homework: [ 10, 5, 10 ],
quiz: [ 10, 8 ],
extraCredit: 0,
quizAverage: 9
},
{
_id: 2,
student: 'Ryan',
homework: [ 5, 6, 5 ],
quiz: [ 8, 8 ],
extraCredit: 8,
quizAverage: 8
}
]
← $searchMeta (aggregation)

이 페이지의 내용