MongoDB $Set 연산자
-
MongoDB
$set
연산자 - 최상위 필드 설정
- 포함된 문서의 필드 설정
- 배열의 요소 설정
-
$set
(집계) -
두 개의
$set
단계 사용 - 포함된 문서에 필드 추가
- 기존 필드 덮어쓰기
- 배열에 요소 추가
이 기사의 도움을 통해 $set
연산자를 사용하여 MongoDB에서 개체를 부분적으로 업데이트하여 새 개체가 기존 개체와 오버레이/병합되도록 하는 방법을 배웁니다.
$set
연산자는 필드 값을 주어진 값으로 바꿉니다. $set
연산자 표현식은 다음 구문을 사용합니다.
{ $set: { <field1>: <value1>, ... } }
포함된 문서 또는 점 표기법을 사용하는 배열에서 <필드>
를 지정합니다.
MongoDB $set
연산자
필드가 존재하지 않는 경우 $set
연산자는 새 필드가 제약 조건을 위반하지 않는 한 지정된 값으로 필드를 생성합니다.
예를 들어, 존재하지 않는 필드에 대해 점선 경로를 지정하면 $set
연산자는 점선 경로를 완료하는 데 필요에 따라 포함된 문서를 생성합니다.
또한 $set
연산자는 여러 필드-값 쌍을 지정하는 경우 각 필드를 업데이트하거나 생성합니다.
다음 제품
컬렉션을 만들 수 있습니다.
db={
"products": [
{
_id: 100,
quantity: 250,
instock: true,
reorder: false,
details: {
model: "PTI",
make: "Breakout"
},
tags: [
"jeans",
"clothing"
],
ratings: [
{
by: "CustomerIK",
rating: 3
}
]
}
]
}
최상위 필드 설정
조건 _id
가 100
과 일치하는 문서의 경우 아래 작업은 $set
연산자를 사용하여 details
필드, quantity
필드 및 tags
필드의 값을 업데이트합니다. 이에 대한 쿼리는 다음과 같습니다.
db.products.update(
{ _id: 100 },
{ $set:
{
quantity: 500,
details: { model: "2600", make: "Outfitters" },
tags: [ "coats", "outerwear", "clothing" ]
}
}
)
위 작업은 다음을 업데이트합니다.
수량
에서500
까지의 값.- 새 내장 문서가 있는
세부 사항
필드 - 새 배열이 있는
tags
필드
위 쿼리의 결과는 아래 스크린샷에 나와 있습니다.
포함된 문서의 필드 설정
포함된 문서 또는 배열에서 <필드>
를 지정하려면 점 표기법을 사용합니다. 조건 _id
가 100
과 일치하는 문서의 경우 다음 작업은 details
문서의 make
필드를 업데이트합니다.
이에 대한 쿼리는 다음과 같습니다.
db.products.update(
{ _id: 100 },
{ $set: { "details.make": "Breakout Kids" } }
)
위 쿼리의 결과는 아래 스크린샷에 나와 있습니다.
배열의 요소 설정
다음 작업은 tags
필드의 두 번째 요소(배열 인덱스 1
)의 값과 ratings
배열의 첫 번째 요소(배열 인덱스 0
)에 있는 rating
필드의 값을 수정합니다. _id
가 100
과 같은 기준을 충족하는 문서.
이에 대한 쿼리는 다음과 같습니다.
db.products.update(
{ _id: 100 },
{ $set:
{
"tags.1": "wind breaker",
"ratings.0.rating": 2
}
}
)
위 쿼리의 결과는 아래 스크린샷에 나와 있습니다.
$set
(집계)
$set
(집계)은 문서에 새 필드를 추가합니다. $set
은 입력 문서와 새로 추가된 필드의 모든 기존 필드를 포함하는 문서를 출력합니다.
$set
(집계)에는 다음과 같은 구문이 있습니다.
{ $set: { <newField>: <expression>, ... } }
$set
은 기존 문서에 새 필드를 추가하는 명령입니다. 사용자는 집계 작업에 하나 이상의 $set
단계를 포함할 수 있습니다.
포함된 문서(배열의 문서 포함)에 필드를 추가하려면 점 표기법을 사용하십시오. $concatArrays
를 사용하여 $set
을 사용하여 기존 배열 필드에 요소를 추가합니다.
두 개의 $set
단계 사용
다음을 사용하여 샘플 등급
컬렉션을 만듭니다.
db={
"grades": [
{
_id: 1,
student: "Ali",
homework: [10, 8, 9],
quiz: [9, 8],
extraCredit: 3
},
{
_id: 2,
student: "Manahil",
homework: [3, 8, 5],
quiz: [7, 9],
extraCredit: 6
}
]
}
출력 문서에 세 개의 새 필드를 추가하기 위해 다음 프로세스에서 두 개의 $set
단계가 사용됩니다. 이에 대한 쿼리는 다음과 같습니다.
db.grades.aggregate( [
{
$set: {
totalHomework: { $sum: "$homework" },
totalQuiz: { $sum: "$quiz" }
}
},
{
$set: {
totalScore: { $add: [ "$totalHomework", "$totalQuiz", "$extraCredit" ] } }
}
] )
이 작업은 아래 스크린샷과 같이 다음 문서를 반환합니다.
포함된 문서에 필드 추가
다음을 사용하여 샘플 컬렉션 운송
을 만듭니다.
db={
"transport": [
{
_id: 1,
type: "sedan",
specs: { doors: 4, wheels: 4}
},
{
_id: 2,
type: "motorbike",
specs: {doors: 0, wheels: 2}
},
{
_id: 3,
type: "jet ski"
}
]
}
다음 집계 작업은 포함된 문서 specs
에 새 필드 fuel_type
을 생성합니다. 이에 대한 쿼리는 다음과 같습니다.
db.transport.aggregate( [
{ $set: { "specs.fuel_type": "super" } }
] )
이 작업은 아래 스크린샷과 같이 다음 결과를 반환합니다.
기존 필드 덮어쓰기
$set
작업이 기존 필드 이름을 지정하면 원래 필드가 대체됩니다. 다음 항목으로 반려동물
샘플 컬렉션을 만드십시오.
db={
"pets": [
{
_id: 1,
dogs: 10,
cats: 5
}
]
}
다음에 오는 $set
작업은 cats
필드를 재정의합니다. 이에 대한 쿼리는 다음과 같습니다.
db.pets.aggregate( [
{ $set: { "cats": 20 } }
] )
이 작업은 아래 스크린샷과 같이 다음 문서를 반환합니다.
배열에 요소 추가
다음 레코드를 사용하여 샘플 등급
컬렉션을 만듭니다.
db={
"grades": [
{
_id: 1,
student: "Ali",
homework: [10, 8, 9],
quiz: [9, 8],
extraCredit: 3
},
{
_id: 2,
student: "Manahil",
homework: [3, 8, 5],
quiz: [7, 9],
extraCredit: 6
}
]
}
사용자는 $concatArrays
표현식과 함께 $set
연산자를 사용할 수 있습니다. 이렇게 하면 기존 배열 필드에 요소가 추가됩니다.
다음 작업은 $set
을 사용하여 homework
필드를 요소가 새 점수 [ 7 ]
를 포함하는 다른 배열과 연결된 현재 homework
배열인 새 배열로 바꿉니다. 이에 대한 쿼리는 다음과 같습니다.
db.grades.aggregate([
{ $match: { _id: 2 } },
{ $set: { homework: { $concatArrays: [ "$homework", [ 7 ] ] } } }
])
이 작업은 아래 스크린샷과 같이 다음 문서를 반환합니다.
이 기사에서는 $set
연산자를 사용하여 MongoDB의 개체를 부분적으로 업데이트하여 새 개체가 기존 개체와 오버레이/병합되도록 하는 방법을 배웠습니다.