개요
이 페이지에서는 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; } [ ] 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; } [ ] public double[] Coordinates { get; set; } public string Street { get; set; } [ ] 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 | 설명 |
---|---|
| 증가시킬 필드 지정하는 표현식 입니다. 데이터 유형: |
| 필드 증가시킬 정도입니다. 데이터 유형: |
다음 코드 예시 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 | 설명 |
---|---|
| 업데이트 할 필드 지정하는 표현식 입니다. 데이터 유형: |
| 필드 에 곱할 금액입니다. 데이터 유형: |
다음 코드 예시 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 | 설명 |
---|---|
| 이름을 바꿀 필드 지정하는 표현식 입니다. 데이터 유형: |
| 필드 의 새 이름입니다. 데이터 유형: |
다음 코드 예시 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 | 설명 |
---|---|
| 업데이트 할 필드 지정하는 표현식 입니다. 데이터 유형: |
| 필드 설정하다 값입니다. 데이터 유형: |
다음 코드 예시 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 | 설명 |
---|---|
| 업데이트 할 필드 지정하는 표현식 입니다. 데이터 유형: |
| 필드 설정하다 값입니다. 데이터 유형: |
지정된 값이 필드 의 현재 값보다 작은 경우에만 필드 값을 지정된 값으로 업데이트 하려면 메서드를 Builders.Update.Min()
호출합니다. 이 메서드는 다음 매개변수를 허용합니다.
Parameter | 설명 |
---|---|
| 업데이트 할 필드 지정하는 표현식 입니다. 데이터 유형: |
| 필드 설정하다 값입니다. 데이터 유형: |
다음 코드 예시 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 | 설명 |
---|---|
| 업데이트 할 필드 지정하는 표현식 입니다. 데이터 유형: |
| 필드 설정하다 값입니다. 데이터 유형: |
다음 코드 예시 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 | 설명 |
---|---|
| 업데이트 할 필드 지정하는 표현식 입니다. 데이터 유형: |
|
데이터 유형: 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 | 설명 |
---|---|
| 제거 할 필드 지정하는 표현식 입니다. 데이터 유형: |
다음 코드 예시 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 문서
이 가이드 에 설명된 메서드에 대한 자세한 내용은 다음 API 설명서를 참조하세요.