MongoDB $Set 연산자

Tahseen Tauseef 2024년2월15일
  1. MongoDB $set 연산자
  2. 최상위 필드 설정
  3. 포함된 문서의 필드 설정
  4. 배열의 요소 설정
  5. $set(집계)
  6. 두 개의 $set 단계 사용
  7. 포함된 문서에 필드 추가
  8. 기존 필드 덮어쓰기
  9. 배열에 요소 추가
MongoDB $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
        }
      ]
    }
  ]
}

최상위 필드 설정

조건 _id100과 일치하는 문서의 경우 아래 작업은 $set 연산자를 사용하여 details 필드, quantity 필드 및 tags 필드의 값을 업데이트합니다. 이에 대한 쿼리는 다음과 같습니다.

db.products.update(
   { _id: 100 },
   { $set:
      {
        quantity: 500,
        details: { model: "2600", make: "Outfitters" },
        tags: [ "coats", "outerwear", "clothing" ]
      }
   }
)

위 작업은 다음을 업데이트합니다.

  1. 수량에서 500까지의 값.
  2. 새 내장 문서가 있는 세부 사항 필드
  3. 새 배열이 있는 tags 필드

위 쿼리의 결과는 아래 스크린샷에 나와 있습니다.

최상위 필드 설정

포함된 문서의 필드 설정

포함된 문서 또는 배열에서 <필드>를 지정하려면 점 표기법을 사용합니다. 조건 _id100과 일치하는 문서의 경우 다음 작업은 details 문서의 make 필드를 업데이트합니다.

이에 대한 쿼리는 다음과 같습니다.

db.products.update(
   { _id: 100 },
   { $set: { "details.make": "Breakout Kids" } }
)

위 쿼리의 결과는 아래 스크린샷에 나와 있습니다.

포함된 문서의 필드 설정

배열의 요소 설정

다음 작업은 tags 필드의 두 번째 요소(배열 인덱스 1)의 값과 ratings 배열의 첫 번째 요소(배열 인덱스 0)에 있는 rating 필드의 값을 수정합니다. _id100과 같은 기준을 충족하는 문서.

이에 대한 쿼리는 다음과 같습니다.

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의 개체를 부분적으로 업데이트하여 새 개체가 기존 개체와 오버레이/병합되도록 하는 방법을 배웠습니다.

관련 문장 - MongoDB Operator