Docs 菜单
Docs 主页
/ / /
C#/.NET
/ / / /

更新数组

在此页面上

  • Overview
  • 样本数据
  • 添加一个值
  • 添加多个值
  • Remove Values
  • 第一个值
  • 最后一个值
  • 值的所有实例
  • 多个值的所有实例
  • 匹配条件的所有值
  • 更新匹配值
  • 第一个匹配值
  • 所有匹配值
  • All Values
  • API 文档

在本页中,您可以学习;了解如何为大量字段创建 UpdateDefinition 对象。 UpdateDefinition对象指定要执行的更新操作类型、要更新的字段以及每个字段的新值(如果适用)。

.NET/ C#驱动程序支持 MongoDB Server手册中描述的大量更新操作符和修饰符。要为这些操作符之一创建 UpdateDefinitionBuilders.Update对象,请从 属性中调用相应的方法。以下部分更详细地描述了这些方法。

创建UpdateDefinition 对象后,将其传递给UpdateOne()UpdateOneAsync() 方法。有关这些方法的更多信息,请参阅 更新一个页面。

注意

方法重载

本指南中的示例使用 sample_restaurants 数据库中的 restaurants 集合。此集合中的文档使用以下 RestaurantAddressGradeEntry 类作为模型:

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 将集合中的字段反序列化为 Pascal 语句,并将它们映射到 Restaurant 类中的属性。

如需了解有关自定义序列化的更多信息,请参阅“自定义序列化”。

此数据集来自 Atlas 提供的示例数据集。请参阅快速入门,以了解如何创建一个免费的 MongoDB 集群并加载这些示例数据。

要在大量末尾添加一个值,请调用 Builders.Update.Push() 方法。此方法接受以下参数:

Parameter
说明

field

一个表达式,指定要添加值的大量字段。

数据类型: Expression<Func<TDocument, IEnumerable<TItem>>>

value

要添加到大量字段末尾的值。

数据类型: TItem

以下代码示例使用 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.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() 方法将两个新的 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.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 OperatorLINQ标签页以查看相应的语法。

以下示例使用Set() 方法和位置操作符更新匹配文档中的Grades 大量。首先,它仅查找 GradeEntryGrades大量中Grade 属性值为 的第一个"A" 对象。然后,它将第一个匹配的Score GradeEntry对象的 属性更新为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 大量。首先,它仅查找 GradeEntryGrades大量中Grade 属性值为 的第一个"A" 对象。然后,它将第一个匹配的Score GradeEntry对象的 属性更新为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 大量。首先,它仅查找 GradeEntryGrades大量中Grade 属性值为 的第一个"A" 对象。然后,它将第一个匹配的Score GradeEntry对象的 属性更新为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 大量。首先,它仅查找 GradeEntryGrades大量中Grade 属性值为 的第一个"A" 对象。然后,它将第一个匹配的Score GradeEntry对象的 属性更新为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 OperatorLINQ标签页以查看相应的语法。

以下示例使用 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 OperatorLINQ标签页以查看相应的语法。

以下示例使用 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文档:

后退

字段