Update Arrays in One Document
이 페이지의 내용
개요
이 페이지에서는 배열 필드에 대한 UpdateDefinition
객체를 만드는 방법에 대해 학습 수 있습니다. UpdateDefinition
객체 수행할 업데이트 작업의 종류, 업데이트 할 필드 및 각 필드 의 새 값(해당되는 경우)을 지정합니다.
.NET/ C# 드라이버 MongoDB Server 매뉴얼에 설명된 배열 업데이트 연산자 및 수정자를 지원합니다. 이러한 연산자 중 하나에 대한 UpdateDefinition
객체 생성하려면 Builders.Update
속성 에서 해당 메서드를 호출합니다. 다음 섹션에서는 이러한 메서드에 대해 자세히 설명합니다.
UpdateDefinition
객체 만든 후 이를 UpdateOne()
또는 UpdateOneAsync()
메서드에 전달합니다. 이러한 메서드에 대한 자세한 내용은 업데이트 1 페이지를 참조하세요.
참고
메서드 오버로드
이 페이지의 많은 메서드에는 여러 오버로드가 있습니다. 이 가이드 의 예제에서는 각 메서드에 대한 정의를 하나만 보여줍니다. 사용 가능한 오버로드에 대한 자세한 내용은 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 클러스터를 생성하고 이 샘플 데이터를 로드하는 방법을 알아보세요.
1개의 값 추가
배열 끝에 하나의 값을 추가하려면 Builders.Update.Push()
메서드를 호출합니다. 이 메서드는 다음 매개변수를 허용합니다.
Parameter | 설명 |
---|---|
| 값을 추가할 배열 필드 지정하는 표현식 입니다. 데이터 유형: |
| 배열 필드 의 끝에 추가할 값입니다. 데이터 유형: |
다음 코드 예시 Push()
메서드를 사용하여 일치하는 문서 의 Grades
배열 에 새 GradeEntry
객체 추가합니다.
var filter = Builders<Restaurant>.Filter.Eq("name", "Downtown Deli"); var update = Builders<Restaurant>.Update .Push(restaurant => restaurant.Grades, new GradeEntry() { Date = DateTime.Now, Grade = "A", Score = 96 }); var result = _restaurantsCollection.UpdateOne(filter, update); return result;
var filter = Builders<Restaurant>.Filter.Eq("name", "Downtown Deli"); var update = Builders<Restaurant>.Update .Push(restaurant => restaurant.Grades, new GradeEntry() { Date = DateTime.Now, Grade = "A", Score = 96 }); var result = await _restaurantsCollection.UpdateOneAsync(filter, update); return result;
배열 의 끝에 값을 추가하려면배열 에 아직 존재하지 않는 경우에만 Builders.Update.AddToSet()
메서드를 호출합니다. MongoDB Server 값의 BSON 표현을 배열 에 있는 다른 요소의 BSON 표현과 비교하여 값이 배열 에 이미 존재하는지 확인합니다.
AddToSet()
메서드는 다음 매개 변수를 허용합니다:
Parameter | 설명 |
---|---|
| 값을 추가할 배열 필드 지정하는 표현식 입니다. 데이터 유형: |
| 배열 필드 의 끝에 추가할 값입니다. 데이터 유형: |
다음 코드 예시 AddToSet()
메서드를 호출하여 첫 번째 GradeEntry
객체 일치하는 문서 의 Grades
배열 에 다시 추가합니다. 값이 이미 배열 에 존재하므로 업데이트 작업은 아무 작업도 수행하지 않습니다.
var filter = Builders<Restaurant>.Filter.Eq("name", "Downtown Deli"); var firstGradeEntry = _restaurantsCollection.Find(filter).FirstOrDefault().Grades[0]; var update = Builders<Restaurant>.Update .AddToSet(restaurant => restaurant.Grades, firstGradeEntry); var result = _restaurantsCollection.UpdateOne(filter, update); return result;
var filter = Builders<Restaurant>.Filter.Eq("name", "Downtown Deli"); var firstGradeEntry = _restaurantsCollection.Find(filter).FirstOrDefault().Grades[0]; var update = Builders<Restaurant>.Update .AddToSet(restaurant => restaurant.Grades, firstGradeEntry); var result = await _restaurantsCollection.UpdateOneAsync(filter, update); return result;
여러 값 추가
배열 에 여러 값을 추가하려면 Builders.Update.PushEach()
메서드를 호출합니다. 이 메서드는 다음 매개변수를 허용합니다.
Parameter | 설명 |
---|---|
| 하나 이상의 값을 추가할 배열 필드 지정하는 표현식 입니다. 데이터 유형: |
| 배열 필드 에 추가할 값입니다. 데이터 유형: |
| 업데이트 후 배열 의 시작 부분부터 계산하여 배열 에 유지할 요소의 수입니다. 값이 음수이면 메서드는 배열 끝에서 지정된 수의 요소를 유지합니다. 데이터 유형: |
| 값을 추가할 배열 의 위치입니다. 기본값 으로 이 메서드는 배열 의 끝에 값을 추가합니다. 데이터 유형: |
| 새 값을 추가한 후 운전자 배열 요소를 정렬하는 방법을 지정하는 데이터 유형: SortDefinition<TItem> |
다음 코드 예시 PushEach()
메서드를 사용하여 일치하는 문서 의 Grades
배열 시작 부분에 두 개의 새 GradeEntry
객체를 추가합니다. 그런 다음 배열 요소를 Score
필드의 값을 기준으로 내림차순으로 정렬합니다.
var filter = Builders<Restaurant>.Filter.Eq("name", "Downtown Deli"); var newGrades = new List<GradeEntry> { new GradeEntry { Date = DateTime.Now, Grade = "A", Score = 95 }, new GradeEntry { Date = DateTime.Now, Grade = "B+", Score = 89,} }; var scoreSort = Builders<GradeEntry>.Sort.Descending(g => g.Score); var update = Builders<Restaurant>.Update.PushEach( "Grades", newGrades, position: 0, sort: scoreSort); var result = _restaurantsCollection.UpdateOne(filter, update); return result;
var filter = Builders<Restaurant>.Filter.Eq("name", "Downtown Deli"); var newGrades = new List<GradeEntry> { new GradeEntry { Date = DateTime.Now, Grade = "A", Score = 95 }, new GradeEntry { Date = DateTime.Now, Grade = "B+", Score = 89,} }; var scoreSort = Builders<GradeEntry>.Sort.Descending(g => g.Score); var update = Builders<Restaurant>.Update.PushEach( "Grades", newGrades, position: 0, sort: scoreSort); var result = await _restaurantsCollection.UpdateOneAsync(filter, update); return result;
배열 에 여러 값을 추가하려면배열 에 아직 존재하지 않는 경우에만 Builders.Update.AddToSetEach()
메서드를 호출합니다. 이 메서드는 다음 매개변수를 허용합니다.
Parameter | 설명 |
---|---|
| 하나 이상의 값을 추가할 배열 필드 지정하는 표현식 입니다. 데이터 유형: |
| 배열 필드 에 추가할 값입니다. 데이터 유형: |
다음 코드 예시 AddToSetEach()
메서드를 호출하여 첫 번째 및 두 번째 GradeEntry
객체를 일치하는 문서 의 Grades
배열 에 다시 추가합니다. 이러한 값은 이미 배열 에 존재하므로 업데이트 작업은 아무 작업도 수행하지 않습니다.
var filter = Builders<Restaurant>.Filter.Eq("name", "Downtown Deli"); var doc = _restaurantsCollection.Find(filter).FirstOrDefault(); var firstGradeEntries = new List<GradeEntry> { doc.Grades[0], doc.Grades[1] }; var update = Builders<Restaurant>.Update .AddToSetEach(restaurant => restaurant.Grades, firstGradeEntries); var result = _restaurantsCollection.UpdateOne(filter, update); return result;
var filter = Builders<Restaurant>.Filter.Eq("name", "Downtown Deli"); var doc = _restaurantsCollection.Find(filter).FirstOrDefault(); var firstGradeEntries = new List<GradeEntry> { doc.Grades[0], doc.Grades[1] }; var update = Builders<Restaurant>.Update .AddToSetEach(restaurant => restaurant.Grades, firstGradeEntries); var result = await _restaurantsCollection.UpdateOneAsync(filter, update); return result;
Remove Values
다음 섹션에서는 배열 필드 에서 값을 제거 방법을 설명합니다.
첫 번째 값
배열 에서 첫 번째 값을 제거 하려면 Builders.Update.PopFirst()
메서드를 호출합니다. 이 메서드는 다음 매개변수를 허용합니다.
Parameter | 설명 |
---|---|
| 첫 번째 값을 제거 할 배열 필드 지정하는 표현식 입니다. 데이터 유형: |
다음 코드 예시 PopFirst()
메서드를 사용하여 일치하는 문서 의 Grades
배열 에서 첫 번째 GradeEntry
객체 제거 .
var filter = Builders<Restaurant>.Filter.Eq("name", "Downtown Deli"); var update = Builders<Restaurant>.Update .PopFirst(restaurant => restaurant.Grades); var result = _restaurantsCollection.UpdateOne(filter, update); return result;
var filter = Builders<Restaurant>.Filter.Eq("name", "Downtown Deli"); var update = Builders<Restaurant>.Update .PopFirst(restaurant => restaurant.Grades); var result = await _restaurantsCollection.UpdateOneAsync(filter, update); return result;
마지막 값
배열 에서 마지막 값을 제거 하려면 Builders.Update.PopLast()
메서드를 호출합니다. 이 메서드는 다음 매개변수를 허용합니다.
Parameter | 설명 |
---|---|
| 마지막 값을 제거 할 배열 필드 지정하는 표현식 입니다. 데이터 유형: |
다음 코드 예시 PopLast()
메서드를 사용하여 일치하는 문서 의 Grades
배열 에서 마지막 GradeEntry
객체 제거 .
var filter = Builders<Restaurant>.Filter.Eq("name", "Downtown Deli"); var update = Builders<Restaurant>.Update .PopLast(restaurant => restaurant.Grades); var result = _restaurantsCollection.UpdateOne(filter, update); return result;
var filter = Builders<Restaurant>.Filter.Eq("name", "Downtown Deli"); var update = Builders<Restaurant>.Update .PopLast(restaurant => restaurant.Grades); var result = await _restaurantsCollection.UpdateOneAsync(filter, update); return result;
값의 모든 인스턴스
배열 에서 특정 값의 모든 인스턴스를 제거 하려면 Builders.Update.Pull()
메서드를 호출합니다. 이 메서드는 다음 매개변수를 허용합니다.
Parameter | 설명 |
---|---|
| 값을 제거 할 배열 필드 지정하는 표현식 입니다. 데이터 유형: |
| 배열 필드 에서 제거 값입니다. 데이터 유형: |
다음 코드 예시 Pull()
메서드를 사용하여 일치하는 문서 의 Grades
배열 에서 특정 GradeEntry
객체 의 모든 인스턴스를 제거 .
var filter = Builders<Restaurant>.Filter.Eq("name", "Downtown Deli"); // Add duplicate values to Grades array var newGrades = new List<GradeEntry> { new GradeEntry { Date = DateTime.MinValue, Grade = "A", Score = 95 }, new GradeEntry { Date = DateTime.MinValue, Grade = "A", Score = 95,} }; var addUpdate = Builders<Restaurant>.Update .PushEach("Grades", newGrades); _restaurantsCollection.UpdateOne(filter, addUpdate); // Remove duplicates from Grades array var pullUpdate = Builders<Restaurant>.Update .Pull(restaurant => restaurant.Grades, newGrades[0]); var result = _restaurantsCollection.UpdateOne(filter, pullUpdate); return result;
var filter = Builders<Restaurant>.Filter.Eq("name", "Downtown Deli"); // Add duplicate values to Grades array var newGrades = new List<GradeEntry> { new GradeEntry { Date = DateTime.MinValue, Grade = "A", Score = 95 }, new GradeEntry { Date = DateTime.MinValue, Grade = "A", Score = 95,} }; var addUpdate = Builders<Restaurant>.Update .PushEach("Grades", newGrades); await _restaurantsCollection.UpdateOneAsync(filter, addUpdate); // Remove duplicates from Grades array var pullUpdate = Builders<Restaurant>.Update .Pull(restaurant => restaurant.Grades, newGrades[0]); var result = await _restaurantsCollection.UpdateOneAsync(filter, pullUpdate); return result;
여러 값의 모든 인스턴스
배열 에서 둘 이상의 특정 값을 가진 모든 인스턴스를 제거 하려면 Builders.Update.PullAll()
메서드를 호출합니다. 이 메서드는 다음 매개변수를 허용합니다.
Parameter | 설명 |
---|---|
| 값을 제거 할 배열 필드 지정하는 표현식 입니다. 데이터 유형: |
| 배열 필드 에서 제거 할 값입니다. 데이터 유형: |
다음 코드 예시 PullAll()
메서드를 사용하여 일치하는 문서 의 Grades
배열 에서 두 특정 GradeEntry
객체의 모든 인스턴스를 제거 .
var filter = Builders<Restaurant>.Filter.Eq("name", "Downtown Deli"); // Add duplicate values to Grades array var newGrades = new List<GradeEntry> { new GradeEntry { Date = DateTime.MinValue, Grade = "A", Score = 95 }, new GradeEntry { Date = DateTime.MinValue, Grade = "A", Score = 95,}, new GradeEntry { Date = DateTime.MinValue, Grade = "B", Score = 85 }, new GradeEntry { Date = DateTime.MinValue, Grade = "B", Score = 85,} }; var addUpdate = Builders<Restaurant>.Update .PushEach("Grades", newGrades); _restaurantsCollection.UpdateOne(filter, addUpdate); // Remove duplicates from Grades array var gradesToRemove = new List<GradeEntry> { newGrades[0], newGrades[2] }; var pullUpdate = Builders<Restaurant>.Update .PullAll(restaurant => restaurant.Grades, gradesToRemove); var result = _restaurantsCollection.UpdateOne(filter, pullUpdate); return result;
var filter = Builders<Restaurant>.Filter.Eq("name", "Downtown Deli"); // Add duplicate values to Grades array var newGrades = new List<GradeEntry> { new GradeEntry { Date = DateTime.MinValue, Grade = "A", Score = 95 }, new GradeEntry { Date = DateTime.MinValue, Grade = "A", Score = 95,}, new GradeEntry { Date = DateTime.MinValue, Grade = "B", Score = 85 }, new GradeEntry { Date = DateTime.MinValue, Grade = "B", Score = 85,} }; var addUpdate = Builders<Restaurant>.Update .PushEach("Grades", newGrades); await _restaurantsCollection.UpdateOneAsync(filter, addUpdate); // Remove duplicates from Grades array var gradesToRemove = new List<GradeEntry> { newGrades[0], newGrades[2] }; var pullUpdate = Builders<Restaurant>.Update .PullAll(restaurant => restaurant.Grades, gradesToRemove); var result = await _restaurantsCollection.UpdateOneAsync(filter, pullUpdate); return result;
조건과 일치하는 모든 값
배열 에서 특정 조건과 일치하는 모든 값을 제거 하려면 Builders.Update.PullFilter()
메서드를 호출합니다. 이 메서드는 다음 매개변수를 허용합니다.
Parameter | 설명 |
---|---|
| 값을 제거 할 배열 필드 지정하는 표현식 입니다. 데이터 유형: |
| 제거 할 값의 조건을 지정하는 쿼리 필터하다 입니다. 데이터 유형: FilterDefinition<TItem> |
다음 코드 예시 PullFilter()
메서드를 사용하여 일치하는 문서의 Grades
배열 에서 Grade
값이 "F"
인 모든 GradeEntry
객체를 제거 .
var filter = Builders<Restaurant>.Filter.Eq("name", "Downtown Deli"); // Add GradeEntry values with "Grade = F" to Grades array var newGrades = new List<GradeEntry> { new GradeEntry { Date = DateTime.Now, Grade = "F", Score = 10 }, new GradeEntry { Date = DateTime.Now, Grade = "F", Score = 21,}, new GradeEntry { Date = DateTime.Now, Grade = "F", Score = 47 }, new GradeEntry { Date = DateTime.Now, Grade = "F", Score = 6,} }; var addUpdate = Builders<Restaurant>.Update .PushEach("Grades", newGrades); _restaurantsCollection.UpdateOne(filter, addUpdate); // Remove all "Grade = F" values from Grades array var pullUpdate = Builders<Restaurant>.Update .PullFilter(restaurant => restaurant.Grades, gradeEntry => gradeEntry.Grade == "F"); var result = _restaurantsCollection.UpdateOne(filter, pullUpdate); return result;
var filter = Builders<Restaurant>.Filter.Eq("name", "Downtown Deli"); // Add GradeEntry values with "Grade = F" to Grades array var newGrades = new List<GradeEntry> { new GradeEntry { Date = DateTime.Now, Grade = "F", Score = 10 }, new GradeEntry { Date = DateTime.Now, Grade = "F", Score = 21,}, new GradeEntry { Date = DateTime.Now, Grade = "F", Score = 47 }, new GradeEntry { Date = DateTime.Now, Grade = "F", Score = 6,} }; var addUpdate = Builders<Restaurant>.Update .PushEach("Grades", newGrades); await _restaurantsCollection.UpdateOneAsync(filter, addUpdate); // Remove all "Grade = F" values from Grades array var pullUpdate = Builders<Restaurant>.Update .PullFilter(restaurant => restaurant.Grades, gradeEntry => gradeEntry.Grade == "F"); var result = await _restaurantsCollection.UpdateOneAsync(filter, pullUpdate); return result;
일치하는 값 업데이트
배열 필드 의 값을 업데이트 하려면 Builders.Update.Set()
메서드를 호출합니다. 이 메서드는 다음 매개변수를 허용합니다.
Parameter | 설명 |
---|---|
| 업데이트 할 배열 필드 지정하는 표현식 입니다. 데이터 유형: |
| 배열 필드 에 설정하다 새 값입니다. 데이터 유형: |
메서드와 함께 위치 연산자 사용하여 Set()
배열 의 특정 값을 쿼리 하고 업데이트 수 있습니다. LINQ3 제공자 사용하는 경우 .NET/ C# 드라이버 위치 연산자 대신 LINQ 구문도 지원합니다.
다음 섹션에서는 배열 필드 에서 일치하는 값을 업데이트 다양한 방법을 설명합니다.
첫 번째 일치하는 값
배열 의 첫 번째 값을 업데이트 하려면 위치 연산자 ($
) 또는 LINQ 구문을 사용할 수 있습니다. Positional Operator 또는 LINQ 탭 선택하여 해당 구문을 확인합니다.
다음 예시 Set()
메서드와 위치 연산자 사용하여 일치하는 문서 에서 Grades
배열 업데이트 . 먼저, GradeEntry
Grades
배열 에서 Grade
속성 값이 인 첫 번째 객체 만 "A"
찾습니다. 그런 다음 일치하는 첫 번째 GradeEntry
객체 의 Score
속성 100로 업데이트합니다.
var filter = Builders<Restaurant>.Filter.Eq("name", "Downtown Deli") & Builders<Restaurant>.Filter.Eq("grades.grade", "A"); // Set Score = 100 in first GradeEntry where Grade = "A" var update = Builders<Restaurant>.Update .Set("grades.$.score", 100); var result = _restaurantsCollection.UpdateOne(filter, update); return result;
참고
위치 연산자 사용하려면 배열 필드 쿼리 필터하다 의 일부여야 합니다.
다음 예시 Set()
메서드와 위치 연산자 사용하여 일치하는 문서 에서 Grades
배열 업데이트 . 먼저, GradeEntry
Grades
배열 에서 Grade
속성 값이 인 첫 번째 객체 만 "A"
찾습니다. 그런 다음 일치하는 첫 번째 GradeEntry
객체 의 Score
속성 100로 업데이트합니다.
var filter = Builders<Restaurant>.Filter.Eq("name", "Downtown Deli") & Builders<Restaurant>.Filter.Eq("grades.grade", "A"); // Set Score = 100 in first GradeEntry where Grade = "A" var update = Builders<Restaurant>.Update .Set("grades.$.score", 100); var result = await _restaurantsCollection.UpdateOneAsync(filter, update); return result;
참고
위치 연산자 사용하려면 배열 필드 쿼리 필터하다 의 일부여야 합니다.
다음 예시 Set()
및 FirstMatchingElement()
메서드를 사용하여 일치하는 문서 에서 Grades
배열 업데이트 . 먼저, GradeEntry
Grades
배열 에서 Grade
속성 값이 인 첫 번째 객체 만 "A"
찾습니다. 그런 다음 일치하는 첫 번째 GradeEntry
객체 의 Score
속성 100로 업데이트합니다.
var filter = Builders<Restaurant>.Filter.Eq("name", "Downtown Deli") & Builders<Restaurant>.Filter.Eq("grades.grade", "A"); var update = Builders<Restaurant>.Update .Set(restaurant => restaurant.Grades.FirstMatchingElement().Score, 100); var result = _restaurantsCollection.UpdateOne(filter, update); return result;
다음 예시 Set()
및 FirstMatchingElement()
메서드를 사용하여 일치하는 문서 에서 Grades
배열 업데이트 . 먼저, GradeEntry
Grades
배열 에서 Grade
속성 값이 인 첫 번째 객체 만 "A"
찾습니다. 그런 다음 일치하는 첫 번째 GradeEntry
객체 의 Score
속성 100로 업데이트합니다.
var filter = Builders<Restaurant>.Filter.Eq("name", "Downtown Deli") & Builders<Restaurant>.Filter.Eq("grades.grade", "A"); var update = Builders<Restaurant>.Update .Set(restaurant => restaurant.Grades.FirstMatchingElement().Score, 100); var result = await _restaurantsCollection.UpdateOneAsync(filter, update); return result;
일치하는 모든 값
지정된 조건과 일치하는 배열 의 모든 값을 업데이트 하려면 필터링된 위치 연산자 ($[<identifier>]
) 또는 LINQ 구문을 사용할 수 있습니다. Positional Operator 또는 LINQ 탭 선택하여 해당 구문을 확인합니다.
다음 예시 Set()
메서드와 필터링된 위치 연산자 사용하여 Grades
배열 에서 일치하는 모든 GradeEntry
객체의 Score
속성 일치하는 모든 문서에서 100 로 업데이트 .
var filter = Builders<Restaurant>.Filter.Eq("name", "Downtown Deli"); var arrayFilters = new List<ArrayFilterDefinition> { new BsonDocumentArrayFilterDefinition<Restaurant>( new BsonDocument { { "gradeEntry.score", new BsonDocument { { "$gte", 94} } } }) }; // Set Grade = "A" in all GradeEntry objects where Score >= 94 var update = Builders<Restaurant>.Update .Set("grades.$[gradeEntry].grade", "A"); var updateOptions = new UpdateOptions { ArrayFilters = arrayFilters }; var result = _restaurantsCollection.UpdateOne(filter, update, updateOptions); return result;
다음 예시 Set()
메서드와 필터링된 위치 연산자 사용하여 Grades
배열 에서 일치하는 모든 GradeEntry
객체의 Score
속성 일치하는 모든 문서에서 100 로 업데이트 .
var filter = Builders<Restaurant>.Filter.Eq("name", "Downtown Deli"); var arrayFilters = new List<ArrayFilterDefinition> { new BsonDocumentArrayFilterDefinition<Restaurant>( new BsonDocument { { "gradeEntry.score", new BsonDocument { { "$gte", 94} } } }) }; // Set Grade = "A" in all GradeEntry objects where Score >= 94 var update = Builders<Restaurant>.Update .Set("grades.$[gradeEntry].grade", "A"); var updateOptions = new UpdateOptions { ArrayFilters = arrayFilters }; var result = await _restaurantsCollection.UpdateOneAsync(filter, update, updateOptions); return result;
다음 예시 Set()
및 AllMatchingElements()
메서드를 사용하여 Grades
배열 에서 일치하는 모든 GradeEntry
객체의 Score
속성 일치하는 모든 문서에서 100 로 업데이트 .
var filter = Builders<Restaurant>.Filter.Eq("name", "Downtown Deli"); var arrayFilters = new List<ArrayFilterDefinition> { new BsonDocumentArrayFilterDefinition<Restaurant>( new BsonDocument { { "gradeEntry.score", new BsonDocument { { "$gte", 94} } } }) }; // Set Grade = "A" in all GradeEntry objects where Score >= 94 var update = Builders<Restaurant>.Update .Set(restaurant => restaurant.Grades.AllMatchingElements("gradeEntry").Grade, "A"); var updateOptions = new UpdateOptions { ArrayFilters = arrayFilters }; var result = _restaurantsCollection.UpdateOne(filter, update, updateOptions); return result;
다음 예시 Set()
및 AllMatchingElements()
메서드를 사용하여 Grades
배열 에서 일치하는 모든 GradeEntry
객체의 Score
속성 일치하는 모든 문서에서 100 로 업데이트 .
var filter = Builders<Restaurant>.Filter.Eq("name", "Downtown Deli"); var arrayFilters = new List<ArrayFilterDefinition> { new BsonDocumentArrayFilterDefinition<Restaurant>( new BsonDocument { { "gradeEntry.score", new BsonDocument { { "$gte", 94} } } }) }; // Set Grade = "A" in all GradeEntry objects where Score >= 94 var update = Builders<Restaurant>.Update .Set(restaurant => restaurant.Grades.AllMatchingElements("gradeEntry").Grade, "A"); var updateOptions = new UpdateOptions { ArrayFilters = arrayFilters }; var result = await _restaurantsCollection.UpdateOneAsync(filter, update, updateOptions); return result;
All Values
쿼리 필터하다 와 일치하는 배열 의 모든 값을 업데이트 하려면 모든 위치 연산자 ($[]
) 또는 LINQ 구문을 사용할 수 있습니다. Positional Operator 또는 LINQ 탭 선택하여 해당 구문을 확인합니다.
다음 예시 Set()
메서드와 모든 위치 연산자 사용하여 Grades
배열 에 있는 모든 GradeEntry
객체의 Score
속성 일치하는 문서 에서 100 로 업데이트 .
var filter = Builders<Restaurant>.Filter.Eq("name", "Downtown Deli"); // Set Score = 100 in all GradeEntry objects var update = Builders<Restaurant>.Update .Set("grades.$[].score", 100); var result = _restaurantsCollection.UpdateOne(filter, update); return result;
다음 예시 Set()
메서드와 모든 위치 연산자 사용하여 Grades
배열 에 있는 모든 GradeEntry
객체의 Score
속성 일치하는 문서 에서 100 로 업데이트 .
var filter = Builders<Restaurant>.Filter.Eq("name", "Downtown Deli"); // Set Score = 100 in all GradeEntry objects var update = Builders<Restaurant>.Update .Set("grades.$[].score", 100); var result = await _restaurantsCollection.UpdateOneAsync(filter, update); return result;
다음 예시 Set()
및 AllElements()
메서드를 사용하여 Grades
배열 에 있는 모든 GradeEntry
객체의 Score
속성 일치하는 문서 에서 100(으)로 업데이트 .
var filter = Builders<Restaurant>.Filter.Eq("name", "Downtown Deli"); // Set Score = 100 in all GradeEntry objects var update = Builders<Restaurant>.Update .Set(restaurant => restaurant.Grades.AllElements().Score, 100); var result = _restaurantsCollection.UpdateOne(filter, update); return result;
다음 예시 Set()
및 AllElements()
메서드를 사용하여 Grades
배열 에 있는 모든 GradeEntry
객체의 Score
속성 일치하는 문서 에서 100(으)로 업데이트 .
var filter = Builders<Restaurant>.Filter.Eq("name", "Downtown Deli"); // Set Score = 100 in all GradeEntry objects var update = Builders<Restaurant>.Update .Set(restaurant => restaurant.Grades.AllElements().Score, 100); var result = await _restaurantsCollection.UpdateOneAsync(filter, update); return result;
API 문서
이 가이드 에 설명된 메서드 또는 유형에 대한 자세한 내용은 다음 API 문서를 참조하세요.