Overview
在本页中,您可以学习;了解如何为大量字段创建 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() 方法。 有关这些方法的更多信息,请参阅“更新许多”页面。
样本数据
本指南中的示例使用 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 将集合中的字段反序列化为 Pascal 语句,并将它们映射到 Restaurant 类中的属性。
如需了解有关自定义序列化的更多信息,请参阅“自定义序列化”。
This collection is from the sample datasets provided by Atlas. See the Get Started with the .NET/C# Driver to learn how to create a free MongoDB cluster and load this sample data.
添加一个值
要在大量末尾添加一个值,请调用 Builders.Update.Push() 方法。 此方法接受以下参数:
Parameter | 说明 |
|---|---|
| 一个表达式,指定要添加值的大量字段。 数据类型: |
| 要添加到大量字段末尾的值。 数据类型: |
以下代码示例使用 Push() 方法将新的 GradeEntry对象添加到所有匹配文档中的 Grades大量:
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 | 说明 |
|---|---|
| 一个表达式,指定要添加值的大量字段。 数据类型: |
| 要添加到大量字段末尾的值。 数据类型: |
以下代码示例调用 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 | 说明 |
|---|---|
| 一个表达式,用于指定要向其中添加一个或多个值的大量字段。 数据类型: |
| 要添加到大量字段的值。 数据类型: |
| 要在大量中保留的元素数,更新后从大量的开头开始计数。 如果值为负数,则该方法从大量末尾开始保留指定数量的元素。 数据类型: |
| 大量中添加值的位置。 默认情况下,该方法会将值添加到大量的末尾。 数据类型: |
| 一个 数据类型: SortDefinition<TItem> |
以下代码示例使用 PushEach() 方法将两个新的 GradeEntry 对象添加到所有匹配文档中 Grades大量的开头。 然后,它根据 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 | 说明 |
|---|---|
| 一个表达式,用于指定要向其中添加一个或多个值的大量字段。 数据类型: |
| 要添加到大量字段的值。 数据类型: |
以下代码示例调用 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.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;
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.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 | 说明 |
|---|---|
| 一个表达式,指定要从中删除最后一个值的大量字段。 数据类型: |
以下代码示例使用 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 | 说明 |
|---|---|
| 一个表达式,指定要从中删除值的大量字段。 数据类型: |
| 要从大量字段中删除的值。 数据类型: |
以下代码示例使用 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 | 说明 |
|---|---|
| 一个表达式,指定要从中删除值的大量字段。 数据类型: |
| 要从大量字段中删除的值。 数据类型: |
以下代码示例使用 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 | 说明 |
|---|---|
| 一个表达式,指定要从中删除值的大量字段。 数据类型: |
| 查询过滤,用于指定要删除的值的条件。 数据类型: 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 | 说明 |
|---|---|
| 一个表达式,指定要更新的大量字段。 数据类型: |
| 要设立到大量字段中的新值。 数据类型: |
您可以将位置操作符与 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;
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.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 文档
有关本指南中讨论的任何方法或类型的更多信息,请参阅以下API文档: