AI 에이전트의 경우: 문서 인덱스는 https://www.mongodb.com/ko-kr/docs/llms.txt에서 사용할 수 있으며, 모든 페이지의 마크다운 버전은 어떤 URL 경로에 .md를 추가하여 사용할 수 있습니다.
Docs Menu

많은 문서에서 배열 업데이트

이 페이지에서는 배열 필드에 대한 UpdateDefinition 객체를 만드는 방법에 대해 학습 수 있습니다. UpdateDefinition 객체 수행할 업데이트 작업의 종류, 업데이트 할 필드 및 각 필드 의 새 값(해당되는 경우)을 지정합니다.

The .NET/C# Driver supports the array update operators and modifiers described in the MongoDB Server manual. To create an UpdateDefinition object for one of these operators, call the corresponding method from the Builders.Update property. The following sections describe these methods in more detail.

UpdateDefinition 객체 만든 후 이를 UpdateMany() 또는 UpdateManyAsync() 메서드에 전달합니다. 이러한 메서드에 대한 자세한 내용은 다수 업데이트 페이지를 참조하세요.

참고

메서드 오버로드

이 페이지의 많은 메서드에는 여러 개의 오버로드가 있습니다. 이 가이드 의 예제에서는 각 메서드에 대한 정의를 하나만 보여줍니다. 사용 가능한 오버로드에 대한 자세한 내용은 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.Push() 메서드를 호출합니다. 이 메서드는 다음 매개변수를 허용합니다.

Parameter
설명

field

값을 추가할 배열 필드 지정하는 표현식 입니다.

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

value

배열 필드 의 끝에 추가할 값입니다.

데이터 유형: TItem

다음 코드 예시 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.UpdateMany(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.UpdateManyAsync(filter, update);
return result;

푸시 작업 구성

배열 의 특정 위치에 값을 추가하거나 배열 을 업데이트한 후 정렬하거나 슬라이스하려면 대신 PushEach() 메서드를 호출합니다.

배열 의 끝에 값을 추가하려면배열 에 아직 존재하지 않는 경우에만 Builders.Update.AddToSet() 메서드를 호출합니다. MongoDB Server 값의 BSON 표현을 배열 에 있는 다른 요소의 BSON 표현과 비교하여 값이 배열 에 이미 존재하는지 확인합니다.

AddToSet() 메서드는 다음 매개 변수를 허용합니다:

Parameter
설명

field

값을 추가할 배열 필드 지정하는 표현식 입니다.

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

value

배열 필드 의 끝에 추가할 값입니다.

데이터 유형: TItem

다음 코드 예시 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.UpdateMany(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.UpdateManyAsync(filter, update);
return result;

배열 에 여러 값을 추가하려면 Builders.Update.PushEach() 메서드를 호출합니다. 이 메서드는 다음 매개변수를 허용합니다.

Parameter
설명

field

하나 이상의 값을 추가할 배열 필드 지정하는 표현식 입니다.

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

values

배열 필드 에 추가할 값입니다.

데이터 유형: IEnumerable<TItem>

slice

업데이트 후 배열 의 시작 부분부터 계산하여 배열 에 유지할 요소의 수입니다. 값이 음수이면 메서드는 배열 끝에서 지정된 수의 요소를 유지합니다.

데이터 유형: int?

position

값을 추가할 배열 의 위치입니다. 기본값 으로 이 메서드는 배열 의 끝에 값을 추가합니다.

데이터 유형: int?

sort

새 값을 추가한 후 운전자 배열 요소를 정렬하는 방법을 지정하는 SortDefinition 객체 입니다.

데이터 유형: 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.UpdateMany(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.UpdateManyAsync(filter, update);
return result;

배열 에 여러 값을 추가하려면배열 에 아직 존재하지 않는 경우에만 Builders.Update.AddToSetEach() 메서드를 호출합니다. 이 메서드는 다음 매개변수를 허용합니다.

Parameter
설명

field

하나 이상의 값을 추가할 배열 필드 지정하는 표현식 입니다.

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

values

배열 필드 에 추가할 값입니다.

데이터 유형: IEnumerable<TItem>

다음 코드 예시 AddToSetEach() 메서드를 호출하여 일치하는 모든 문서의 Grades 배열 에 첫 번째 및 두 번째 GradeEntry 객체를 다시 추가합니다. 이러한 값은 이미 배열 에 존재하므로 업데이트 작업은 아무 작업도 수행하지 않습니다.

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.UpdateMany(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.UpdateManyAsync(filter, update);
return result;

다음 섹션에서는 배열 필드 에서 값을 제거 방법을 설명합니다.

배열 에서 첫 번째 값을 제거 하려면 Builders.Update.PopFirst() 메서드를 호출합니다. 이 메서드는 다음 매개변수를 허용합니다.

Parameter
설명

field

첫 번째 값을 제거 할 배열 필드 지정하는 표현식 입니다.

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

다음 코드 예시 PopFirst() 메서드를 사용하여 일치하는 모든 문서의 Grades 배열 에서 첫 번째 GradeEntry 객체 제거 .

var filter = Builders<Restaurant>.Filter.Eq("name", "Downtown Deli");
var update = Builders<Restaurant>.Update
.PopFirst(restaurant => restaurant.Grades);
var result = _restaurantsCollection.UpdateMany(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.UpdateManyAsync(filter, update);
return result;

배열 에서 마지막 값을 제거 하려면 Builders.Update.PopLast() 메서드를 호출합니다. 이 메서드는 다음 매개변수를 허용합니다.

Parameter
설명

field

마지막 값을 제거 할 배열 필드 지정하는 표현식 입니다.

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

다음 코드 예시 PopLast() 메서드를 사용하여 일치하는 모든 문서의 Grades 배열 에서 마지막 GradeEntry 객체 제거 .

var filter = Builders<Restaurant>.Filter.Eq("name", "Downtown Deli");
var update = Builders<Restaurant>.Update
.PopLast(restaurant => restaurant.Grades);
var result = _restaurantsCollection.UpdateMany(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.UpdateManyAsync(filter, update);
return result;

배열 에서 특정 값의 모든 인스턴스를 제거 하려면 Builders.Update.Pull() 메서드를 호출합니다. 이 메서드는 다음 매개변수를 허용합니다.

Parameter
설명

field

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

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

value

배열 필드 에서 제거 값입니다.

데이터 유형: TItem

다음 코드 예시 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.UpdateMany(filter, addUpdate);
// Remove duplicates from Grades array
var pullUpdate = Builders<Restaurant>.Update
.Pull(restaurant => restaurant.Grades, newGrades[0]);
var result = _restaurantsCollection.UpdateMany(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.UpdateManyAsync(filter, addUpdate);
// Remove duplicates from Grades array
var pullUpdate = Builders<Restaurant>.Update
.Pull(restaurant => restaurant.Grades, newGrades[0]);
var result = await _restaurantsCollection.UpdateManyAsync(filter, pullUpdate);
return result;

배열 에서 둘 이상의 특정 값을 가진 모든 인스턴스를 제거 하려면 Builders.Update.PullAll() 메서드를 호출합니다. 이 메서드는 다음 매개변수를 허용합니다.

Parameter
설명

field

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

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

values

배열 필드 에서 제거 할 값입니다.

데이터 유형: IEnumerable<TItem>

다음 코드 예시 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.UpdateMany(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.UpdateMany(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.UpdateManyAsync(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.UpdateManyAsync(filter, pullUpdate);
return result;

배열 에서 특정 조건과 일치하는 모든 값을 제거 하려면 Builders.Update.PullFilter() 메서드를 호출합니다. 이 메서드는 다음 매개변수를 허용합니다.

Parameter
설명

field

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

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

filter

제거 할 값의 조건을 지정하는 쿼리 필터하다 입니다.

데이터 유형: 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.UpdateMany(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.UpdateMany(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.UpdateManyAsync(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.UpdateManyAsync(filter, pullUpdate);
return result;

배열 필드 의 값을 업데이트 하려면 Builders.Update.Set() 메서드를 호출합니다. 이 메서드는 다음 매개변수를 허용합니다.

Parameter
설명

field

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

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

value

배열 필드 에 설정하다 새 값입니다.

데이터 유형: TItem

메서드와 함께 위치 연산자 사용하여 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.UpdateMany(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.UpdateManyAsync(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");
// Set Score = 100 in first GradeEntry where Grade = "A"
var update = Builders<Restaurant>.Update
.Set(restaurant => restaurant.Grades.FirstMatchingElement().Score, 100);
var result = _restaurantsCollection.UpdateMany(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");
// Set Score = 100 in first GradeEntry where Grade = "A"
var update = Builders<Restaurant>.Update
.Set(restaurant => restaurant.Grades.FirstMatchingElement().Score, 100);
var result = await _restaurantsCollection.UpdateManyAsync(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.UpdateMany(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.UpdateManyAsync(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.UpdateMany(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.UpdateManyAsync(filter, update, updateOptions);
return result;

쿼리 필터하다 와 일치하는 배열 의 모든 값을 업데이트 하려면 모든 위치 연산자 ($[]) 또는 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.UpdateMany(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.UpdateManyAsync(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.UpdateMany(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.UpdateManyAsync(filter, update);
return result;

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