Docs Menu
Docs Home
/ /

$ 설정하다 (업데이트 연산자)

참고

명확화

다음 페이지는 업데이트 연산자 $set을 참조합니다. 집계 단계에 대해서는 $set을 참조하세요.

$set

$set 연산자는 필드 값을 지정된 값으로 바꿉니다.

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

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

$set 연산자 표현식의 형식은 다음과 같습니다.

{ $set: { <field1>: <value1>, ... } }

내장된 문서나 배열에 <field> 기호를 지정하려면 점 표기법을사용하십시오.

MongoDB 5.0부터 업데이트 연산자는 문자열 기반 이름이 있는 문서 필드를 사전순으로 처리합니다. 숫자 이름이 있는 필드는 숫자 순서대로 처리됩니다. 자세한 내용은 업데이트 운영자 동작을 참조하십시오.

필드가 존재하지 않는 경우 $set 는 새 필드가 유형 제한 조건을 위반하지 않는 한 지정된 값으로 새 필드를 추가합니다. 존재하지 않는 필드에 점선 경로를 지정하면 $set 는 필드에 대한 점선 경로를 채우기 위해 필요에 따라 내장된 문서를 생성합니다.

여러 필드-값 쌍을 지정하면 $set 이 각 필드를 업데이트하거나 생성합니다.

MongoDB 5.0부터 빈 피연산자 표현식( { } )과 함께 $set과 같은 업데이트 연산자를 사용할 때 mongod에서 더 이상 오류가 발생하지 않습니다. 업데이트가 비어 있으면 변경 사항이 없으며 oplog 항목이 생성되지 않습니다(즉, 작업이 작동하지 않음을 의미합니다).

$set 연산자 전체 문서 대체에 비해 다음과 같은 이점을 제공합니다.

  • 대상 업데이트: $set 는 지정된 필드만 수정하여 대용량 문서로 작업할 때 불필요한 쓰기 (write) 및 오버헤드를 방지하여 효율적인 업데이트를 보장합니다.

  • 효율적인 Oplog 항목: $set 는 전체 문서 대신 업데이트된 필드만 oplog 에 기록하여 복제 최적화합니다. 이 프로세스 oplog 항목의 크기를 줄이고 노드가 변경 사항을 더 효율적으로 복제할 수 있도록 합니다.

  • 간소화된 로직: $set 를 사용하는 애플리케이션은 업데이트 전송하기 전에 변경된 필드를 계산할 필요가 없습니다. MongoDB 내부적으로 델타 계산을 처리하여 복잡성을 줄입니다.

이 페이지의 예시에서는 sample_mflix 샘플 데이터 세트의 데이터를 사용합니다. 이 데이터 세트를 자체 관리형 MongoDB 배포서버에 로드하는 방법에 대한 자세한 내용은 샘플 데이터 세트 로드를 참조하세요. 샘플 데이터베이스를 수정한 경우 이 페이지의 예시를 실행 하려면 데이터베이스를 제거하고 다시 만들어야 할 수 있습니다.

다음 예시에서는 $set 연산자를 사용하여 일치하는 영화 문서에 labelstatus 필드를 추가합니다.

db.movies.updateOne(
{ title: "The Dark Knight" },
{
$set: {
label: "Award Winner",
status: "classic"
}
}
)

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

{
acknowledged: true,
insertedId: null,
matchedCount: 1,
modifiedCount: 1,
upsertedCount: 0
}

다음 예시는 점 표기법을 사용하여 일치하는 영화의 imdb 내장된 문서의 highlight 필드를 업데이트합니다.

db.movies.updateOne(
{ title: "The Dark Knight" },
{ $set: { "imdb.highlight": "Critics' Choice" } }
)

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

{
acknowledged: true,
insertedId: null,
matchedCount: 1,
modifiedCount: 1,
upsertedCount: 0
}

중요

이전 예시에서는 내장된 imdb 문서의 highlight 필드를 점 표기법을 사용하여 업데이트합니다. 다음 형식은 대신 내장된 문서 전체를 대체합니다. imdb의 다른 필드를 모두 제거합니다:

db.movies.updateOne(
{ title: "The Dark Knight" },
{ $set: { imdb: { highlight: "Critics' Choice" } } }
)

다음 예시에서는 $set 연산자를 사용하여 일치하는 영화 문서의 genres 배열의 첫 번째 요소(배열 인덱스 0)를 업데이트합니다.

db.movies.updateOne(
{ title: "The Dark Knight" },
{ $set: { "genres.0": "Thriller" } }
)

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

{
acknowledged: true,
insertedId: null,
matchedCount: 1,
modifiedCount: 1,
upsertedCount: 0
}

배열에 대한 추가 업데이트 연산자는 배열 업데이트 연산자를 참조하십시오.

돌아가기

$rename

이 페이지의 내용