Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/ / /
C#/ .NET 드라이버
/ /

여러 문서의 필드 업데이트

이 페이지에서는 MongoDB .NET/ C# 드라이버 사용하여 여러 MongoDB 문서의 필드를 업데이트 방법을 학습 수 있습니다. 이 페이지에서는 필드에 수행할 업데이트 작업을 지정하는 UpdateDefinition<TDocument> 객체를 만드는 방법을 설명합니다. 이러한 객체를 다수 업데이트 페이지에 설명된업데이트 메서드에 전달할 수 있습니다.

.NET/ C# 드라이버 MongoDB Server 매뉴얼에 설명된 필드 업데이트 연산자를 지원합니다. 업데이트 작업을 지정하려면 Builders.Update 속성 에서 해당 메서드를 호출합니다. 다음 섹션에서는 이러한 메서드에 대해 자세히 설명합니다.

참고

메서드 오버로드

이 페이지의 많은 메서드에는 여러 개의 오버로드가 있습니다. 이 가이드 의 예제에서는 각 메서드에 대한 정의를 하나만 보여줍니다. 사용 가능한 오버로드에 대한 자세한 내용은 API 설명서를 참조하세요.

이 가이드의 예에서는 sample_restaurants 데이터베이스의 restaurants 컬렉션을 사용합니다. 이 컬렉션의 문서는 다음 Restaurant, Address, GradeEntry 클래스를 모델로 사용합니다.

public class Restaurant
{
public ObjectId Id { get; set; }
public string Name { get; set; }
[BsonElement("restaurant_id")]
public string RestaurantId { get; set; }
public string Cuisine { get; set; }
public Address Address { get; set; }
public string Borough { get; set; }
public List<GradeEntry> Grades { get; set; }
}
public class Address
{
public string Building { get; set; }
[BsonElement("coord")]
public double[] Coordinates { get; set; }
public string Street { get; set; }
[BsonElement("zipcode")]
public string ZipCode { get; set; }
}
public class GradeEntry
{
public DateTime Date { get; set; }
public string Grade { get; set; }
public float? Score { get; set; }
}

참고

restaurants 컬렉션 의 문서는 대소문자 명명 규칙을 사용합니다. 이 가이드 의 예제에서는 ConventionPack 를 사용하여 컬렉션 의 필드를 파스칼식 대/소문자로 역직렬화하고 Restaurant 클래스의 속성에 매핑합니다.

사용자 지정 직렬화에 대해 자세히 알아보려면 사용자 지정 직렬화를참조하세요.

이 컬렉션 Atlas 에서 제공하는 샘플 데이터 세트에서 가져온 것입니다. 무료 MongoDB cluster 생성하고 이 샘플 데이터를 로드하는 방법을 학습 .NET/ C# 드라이버 시작하기 를 참조하세요.

필드 값을 특정 양만큼 증가시키려면 Builders.Update.Inc() 메서드를 호출합니다. 이 메서드는 다음 매개변수를 허용합니다.

Parameter
설명

field

증가시킬 필드 지정하는 표현식 입니다.

데이터 유형: Expression<Func<TDocument, TField>>

value

필드 증가시킬 정도입니다.

데이터 유형: TField

다음 코드 예시 Inc() 메서드를 사용하여 일치하는 모든 문서에서 Grades 배열 의 첫 번째 GradeEntry 객체 에 있는 Score 값을 2 만큼 증가시킵니다.

var filter = Builders<Restaurant>.Filter.Eq("name", "Shake Shack");
var update = Builders<Restaurant>.Update
.Inc(restaurant => restaurant.Grades[0].Score, 2);
var result = _restaurantsCollection.UpdateMany(filter, update);
var filter = Builders<Restaurant>.Filter.Eq("name", "Shake Shack");
var update = Builders<Restaurant>.Update
.Inc(restaurant => restaurant.Grades[0].Score, 2);
var result = await _restaurantsCollection.UpdateManyAsync(filter, update);

필드 값에 특정 금액을 곱하려면 Builders.Update.Mul() 메서드를 호출합니다. 이 메서드는 다음 매개변수를 허용합니다.

Parameter
설명

field

업데이트 할 필드 지정하는 표현식 입니다.

데이터 유형: Expression<Func<TDocument, TField>>

value

필드 에 곱할 금액입니다.

데이터 유형: TField

다음 코드 예시 Mul() 메서드를 사용하여 일치하는 모든 문서에 있는 Grades 배열 의 첫 번째 GradeEntry 객체 에 있는 Score 값에 1.25 를 곱합니다.

var filter = Builders<Restaurant>.Filter.Eq("name", "Shake Shack");
var update = Builders<Restaurant>.Update
.Mul(restaurant => restaurant.Grades[0].Score, 1.25f);
var result = _restaurantsCollection.UpdateMany(filter, update);
var filter = Builders<Restaurant>.Filter.Eq("name", "Shake Shack");
var update = Builders<Restaurant>.Update
.Mul(restaurant => restaurant.Grades[0].Score, 1.25f);
var result = await _restaurantsCollection.UpdateManyAsync(filter, update);

필드 이름을 바꾸려면 Builders.Update.Rename() 메서드를 호출합니다. 이 메서드는 다음 매개변수를 허용합니다.

Parameter
설명

field

이름을 바꿀 필드 지정하는 표현식 입니다.

데이터 유형: Expression<Func<TDocument, TField>>

newName

필드 의 새 이름입니다.

데이터 유형: string

다음 코드 예시 Rename() 메서드를 사용하여 일치하는 모든 문서에서 Address 필드 이름을 location(으)로 변경합니다.

var filter = Builders<Restaurant>.Filter.Eq("name", "Shake Shack");
var update = Builders<Restaurant>.Update
.Rename(restaurant => restaurant.Address, "location");
var result = _restaurantsCollection.UpdateMany(filter, update);
var filter = Builders<Restaurant>.Filter.Eq("name", "Shake Shack");
var update = Builders<Restaurant>.Update
.Rename(restaurant => restaurant.Address, "location");
var result = await _restaurantsCollection.UpdateManyAsync(filter, update);

참고

앞의 코드 예제에서는 location 필드 이름을 사용하는데, 이는 Restaurant 클래스의 속성 이름이 아닌 MongoDB 의 필드 이름 명명 체계와 일치하기 때문입니다.

필드 값을 특정 값으로 설정하다 하려면 Builders.Update.Set() 메서드를 호출합니다. 이 메서드는 다음 매개변수를 허용합니다.

Parameter
설명

field

업데이트 할 필드 지정하는 표현식 입니다.

데이터 유형: Expression<Func<TDocument, TField>>

value

필드 설정하다 값입니다.

데이터 유형: TField

다음 코드 예시 Set() 메서드를 사용하여 일치하는 모든 문서에서 recommended 필드 이름을 true(으)로 변경합니다.

var filter = Builders<Restaurant>.Filter.Eq("name", "Shake Shack");
var update = Builders<Restaurant>.Update
.Set("recommended", true);
var result = _restaurantsCollection.UpdateMany(filter, update);
var filter = Builders<Restaurant>.Filter.Eq("name", "Shake Shack");
var update = Builders<Restaurant>.Update
.Set("recommended", true);
var result = await _restaurantsCollection.UpdateManyAsync(filter, update);

참고

앞의 코드 예제에서는 recommended 필드 이름을 사용하는데, 이는 Restaurant 클래스의 속성 이름이 아닌 MongoDB 의 필드 이름 명명 체계와 일치하기 때문입니다.

지정된 값이 필드 의 현재 값보다 경우에만 필드 값을 지정된 값으로 업데이트 하려면 메서드를 Builders.Update.Max() 호출합니다. 이 메서드는 다음 매개변수를 허용합니다.

Parameter
설명

field

업데이트 할 필드 지정하는 표현식 입니다.

데이터 유형: Expression<Func<TDocument, TField>>

value

필드 설정하다 값입니다.

데이터 유형: TField

지정된 값이 필드 의 현재 값보다 작은 경우에만 필드 값을 지정된 값으로 업데이트 하려면 메서드를 Builders.Update.Min() 호출합니다. 이 메서드는 다음 매개변수를 허용합니다.

Parameter
설명

field

업데이트 할 필드 지정하는 표현식 입니다.

데이터 유형: Expression<Func<TDocument, TField>>

value

필드 설정하다 값입니다.

데이터 유형: TField

다음 코드 예시 Max() 메서드를 사용하여 첫 번째 GradeEntry 객체 의 Score 필드 일치하는 모든 문서의 20 와 현재 값 중 더 큰 값으로 설정하다 .

var filter = Builders<Restaurant>.Filter.Eq("name", "Shake Shack");
var update = Builders<Restaurant>.Update
.Max(restaurant => restaurant.Grades[0].Score, 20);
var result = _restaurantsCollection.UpdateMany(filter, update);
var filter = Builders<Restaurant>.Filter.Eq("name", "Shake Shack");
var update = Builders<Restaurant>.Update
.Max(restaurant => restaurant.Grades[0].Score, 20);
var result = await _restaurantsCollection.UpdateManyAsync(filter, update);

문서 동일한 작업으로 업서트된 경우에만 필드 값을 설정하다 하려면 Builders.Update.SetOnInsert() 메서드를 호출합니다. 이 메서드는 다음 매개변수를 허용합니다.

Parameter
설명

field

업데이트 할 필드 지정하는 표현식 입니다.

데이터 유형: Expression<Func<TDocument, TField>>

value

필드 설정하다 값입니다.

데이터 유형: TField

다음 코드 예시 SetOnInsert() 메서드를 사용하여 일치하는 모든 문서에서 recommended 필드 true(으)로 설정하다 .

var filter = Builders<Restaurant>.Filter.Eq("name", "Patty's Pies");
var update = Builders<Restaurant>.Update
.SetOnInsert("recommended", true);
var result = _restaurantsCollection.UpdateMany(
filter, update, new UpdateOptions { IsUpsert = true }
);
var filter = Builders<Restaurant>.Filter.Eq("name", "Patty's Pies");
var update = Builders<Restaurant>.Update
.SetOnInsert("recommended", true);
var result = await _restaurantsCollection.UpdateManyAsync(
filter, update, new UpdateOptions { IsUpsert = true }
);

참고

앞의 코드 예제에서는 recommended 필드 이름을 사용하는데, 이는 Restaurant 클래스의 속성 이름이 아닌 MongoDB 의 필드 이름 명명 체계와 일치하기 때문입니다.

문서 업서트에 대해 자세히 학습하려면 다수 업데이트 가이드의 구성 옵션 을 참조하세요.

필드 값을 현재 날짜 및 시간으로 설정하다 하려면 Builders.Update.CurrentDate() 메서드를 호출합니다. 이 메서드는 다음 매개변수를 허용합니다.

Parameter
설명

field

업데이트 할 필드 지정하는 표현식 입니다.

데이터 유형: Expression<Func<TDocument, TField>>

type

UpdateDefinitionCurrentDateType 열거형 에 정의된 날짜 및 시간 형식입니다. 기본값 은 null입니다.

데이터 유형: UpdateDefinitionCurrentDateType?

다음 코드 예시 CurrentDate() 메서드를 사용하여 일치하는 모든 문서에서 첫 번째 GradeEntry 객체 의 Date 필드 현재 날짜로 업데이트 .

var filter = Builders<Restaurant>.Filter.Eq("name", "Shake Shack");
var update = Builders<Restaurant>.Update
.CurrentDate(restaurant => restaurant.Grades[0].Date);
var result = _restaurantsCollection.UpdateMany(filter, update);
var filter = Builders<Restaurant>.Filter.Eq("name", "Shake Shack");
var update = Builders<Restaurant>.Update
.CurrentDate(restaurant => restaurant.Grades[0].Date);
var result = await _restaurantsCollection.UpdateManyAsync(filter, update);

문서 에서 필드 제거 하려면 Builders.Update.Unset() 메서드를 호출합니다. 이 메서드는 다음 매개변수를 허용합니다.

Parameter
설명

field

제거 할 필드 지정하는 표현식 입니다.

데이터 유형: Expression<Func<TDocument, TField>>

다음 코드 예시 Unset() 메서드를 사용하여 일치하는 모든 문서에서 Cuisine 필드 제거 .

var filter = Builders<Restaurant>.Filter.Eq("name", "Shake Shack");
var update = Builders<Restaurant>.Update
.Unset(restaurant => restaurant.Cuisine);
var result = _restaurantsCollection.UpdateMany(filter, update);
var filter = Builders<Restaurant>.Filter.Eq("name", "Shake Shack");
var update = Builders<Restaurant>.Update
.Unset(restaurant => restaurant.Cuisine);
var result = await _restaurantsCollection.UpdateManyAsync(filter, update);

이 가이드 에 설명된 메서드에 대한 자세한 내용은 다음 API 설명서를 참조하세요.

돌아가기

다수 문서 업데이트

이 페이지의 내용