Docs Menu

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; }
[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 클러스터를 생성하고 이 샘플 데이터를 로드하는 방법을 알아보세요.

배열 끝에 하나의 값을 추가하려면 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.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;

푸시 작업 구성

배열 의 특정 위치에 값을 추가하거나 배열 을 업데이트한 후 정렬하거나 슬라이스하려면 대신 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.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
설명

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.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
설명

field

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

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

values

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

데이터 유형: IEnumerable<TItem>

다음 코드 예시 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;

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

배열 에서 첫 번째 값을 제거 하려면 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.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
설명

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.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
설명

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.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
설명

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.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
설명

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.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
설명

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.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;

쿼리 필터하다 와 일치하는 배열 의 모든 값을 업데이트 하려면 모든 위치 연산자 ($[]) 또는 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 문서를 참조하세요.