Docs Menu
Docs Home
/ /

$ 설정하다 (집계 단계)

참고

명확화

다음 페이지는 집계 단계 $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와 함께 사용하세요. 예시를 참조하세요.

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

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

db.movies.aggregate( [
{ $match: { runtime: { $gt: 1000 } } },
{
$set: {
imdbScoreScaled: { $multiply: [ "$imdb.rating", 10 ] },
runtimeHours: {
$floor: { $divide: [ "$runtime", 60 ] }
}
}
},
{
$set: {
totalScore: {
$add: [ "$imdbScoreScaled", "$runtimeHours" ]
}
}
}
] )
[
{ _id: ..., title: 'Baseball', runtime: 1140, imdbScoreScaled: 91, runtimeHours: 19, totalScore: 110 },
{ _id: ..., title: 'Centennial', runtime: 1256, imdbScoreScaled: 85, runtimeHours: 20, totalScore: 105 }
]
...
첫 번째 단계 ($set):
첫 번째 $set 단계에서는imdbScoreScaled IMDB 등급에 를 곱하는 10runtimeHours 런타임을 60 로 나누고 가장 가까운 정수로 반내림하는 이라는 두 개의 필드를 추가합니다.
두 번째 단계 ($set):
$set 번째 totalScore 단계에서는 imdbScoreScaledruntimeHours 추가하여 이전 단계에서 계산된 와 을 합산합니다.

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

다음 집계 작업은 내장된 문서 imdb에 새 필드 normalizedRating 을 추가합니다.

db.movies.aggregate( [
{ $match: { runtime: { $gt: 1000 } } },
{
$set: {
"imdb.normalizedRating": {
$multiply: [ "$imdb.rating", 10 ]
}
}
}
] )
[
{ _id: ..., title: 'Baseball', imdb: { '...': '...', normalizedRating: 91 } },
{ _id: ..., title: 'Centennial', imdb: { '...': '...', normalizedRating: 85 } }
]
...

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

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

db.movies.aggregate( [
{ $match: { title: "Baseball" } },
{ $set: { rated: "UNRATED" } }
] )
[
{ _id: ..., title: 'Baseball', rated: 'UNRATED' }
]
...

한 필드 다른 필드로 바꿀 수 있습니다. 다음 예시 에서는 title 필드 _id 필드 대체합니다.

다음 집계 작업은 $set 을 사용하여 각 문서 의 _id 필드 title 필드 값으로 바꾸고 title 필드 문자열 "movie"로 바꿉니다.

db.movies.aggregate( [
{ $match: { runtime: { $gt: 1000 } } },
{ $set: { _id: "$title", title: "movie" } }
] )
[
{ _id: 'Baseball', title: 'movie' },
{ _id: 'Centennial', title: 'movie' }
]
...

$set $concatArrays 을 표현식 과 함께 사용하여 기존 배열 필드 에 요소를 추가할 수 있습니다. 다음 작업은 을 $set 사용하여 genres 필드 현재 genres 배열 과 새 장르 를 포함하는 다른 배열 이 연결된 새 배열 로 [ "Classic" ] 바꿉니다.

db.movies.aggregate( [
{ $match: { title: "Baseball" } },
{
$set: {
genres: {
$concatArrays: [ "$genres", [ "Classic" ] ]
}
}
}
] )
[
{ _id: ..., title: 'Baseball', genres: [ 'Documentary', 'History', 'Sport', 'Classic' ] }
]
...

다음 집계 작업은 영화 제목을 출시하다 연도와 연결하는 새 필드 titleWithYear 를 각 문서 에 추가합니다.

db.movies.aggregate( [
{ $match: { runtime: { $gt: 1000 } } },
{
$set: {
titleWithYear: {
$concat: [
"$title",
" (",
{ $toString: "$year" },
")"
]
}
}
}
] )
[
{ _id: ..., title: 'Baseball', titleWithYear: 'Baseball (1994)' },
{ _id: ..., title: 'Centennial', titleWithYear: 'Centennial (1978)' }
]
...

이 페이지의 C# 예제에서는 Atlas 샘플 데이터 세트sample_mflix 데이터베이스 사용합니다. 무료 MongoDB Atlas cluster 생성하고 샘플 데이터 세트를 로드하는 방법을 학습하려면 MongoDB .NET/ C# 드라이버 문서에서 시작하기 를 참조하세요.

다음 Movie 클래스는 sample_mflix.movies 컬렉션의 문서를 모델링합니다.

[BsonIgnoreExtraElements]
public class Movie
{
[BsonId]
public ObjectId Id { get; set; }
[BsonElement("title")]
public string Title { get; set; } = null!;
[BsonElement("year")]
public int? Year { get; set; }
[BsonElement("runtime")]
public int? Runtime { get; set; }
[BsonElement("rated")]
public string? Rated { get; set; }
[BsonElement("metacritic")]
public int Metacritic { get; set; }
[BsonElement("plot")]
public string? Plot { get; set; }
[BsonElement("type")]
public string? Type { get; set; }
[BsonElement("cast")]
public string[]? Cast { get; set; }
[BsonElement("directors")]
public string[]? Directors { get; set; }
[BsonElement("writers")]
public string[]? Writers { get; set; }
[BsonElement("imdb")]
public ImdbData? Imdb { get; set; }
}

MongoDB .NET/ C# 운전자 사용하여 $set 집계 파이프라인 에 단계를 추가하려면 PipelineDefinition 객체 에서 Set() 메서드를 호출합니다.

다음 예시는 제목이 "The Godfather"Movie 문서와 일치하고 Rated 필드를 "UNRATED"으로 설정하는 파이프라인 단계를 만듭니다.

var pipeline = new EmptyPipelineDefinition<Movie>()
.Match(Builders<Movie>.Filter.Eq(m => m.Title, "The Godfather"))
.Set(Builders<Movie>.SetFields.Set(m => m.Rated, "UNRATED"));
{ "_id" : "...", "title" : "The Godfather", "runtime" : 175, "rated" : "UNRATED", "metacritic" : 100 }

이 페이지의 Node.js 예제에서는 Atlas 샘플 데이터 세트sample_mflix 데이터베이스 사용합니다. 무료 MongoDB Atlas cluster 생성하고 샘플 데이터 세트를 로드하는 방법을 학습하려면 MongoDB Node.js 운전자 설명서에서 시작하기 를 참조하세요.

MongoDB Node.js 운전자 사용하여 집계 파이프라인 에 $set 단계를 추가하려면 파이프라인 객체 에서 $set 연산자 사용합니다.

다음 예시에서는 각 movie 문서의 lastupdated 필드 값을 Date 객체의 값으로 설정하는 파이프라인 단계를 만듭니다. 그리고 집계 파이프라인을 실행합니다.

const pipeline = [{ $set: { lastupdated: new Date() } }];
const cursor = collection.aggregate(pipeline);
return cursor;

관련 파이프라인 단계에 대해 자세히 학습 $addFields 가이드 참조하세요.

돌아가기

$searchMeta

이 페이지의 내용