Overview
在本指南中,您可以学习;了解如何使用MongoDB .NET/ C#驱动程序更新单个文档中的值。
.NET/ C#驱动程序提供以下方法来更新值:
UpdateOne():更新单个文档中的一个或多个字段。UpdateOneAsync():UpdateOne()的异步版本。
以下部分更详细地描述了这些方法。
样本数据
本指南中的示例使用 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 类中的属性。
如需了解有关自定义序列化的更多信息,请参阅“自定义序列化”。
此集合来自Atlas提供的示例数据集。请参阅.NET/C#驱动程序入门,了解如何创建免费的MongoDB 集群并加载此示例数据。
方法和参数
UpdateOne() 和 UpdateOneAsync() 方法接受以下参数:
Parameter | 说明 |
|---|---|
|
数据类型: FilterDefinition |
|
|
| 可选.指定更新操作配置的 数据类型: UpdateOptions |
| 可选。可用于取消操作的令牌。 数据类型: |
更新多个值
UpdateOne() 和 UpdateOneAsync() 方法只接受一个 UpdateDefinition对象。 以下部分介绍如何在单个方法调用中更新多个值。
组合更新定义
Builders.Update.Combine() 方法允许您组合多个 UpdateDefinition 对象。 此方法接受以下参数:
Parameter | 说明 |
|---|---|
| 要组合的更新定义的大量。 数据类型: |
Combine() 方法返回定义多个更新操作的单个 UpdateDefinition对象。
以下代码示例使用Combine() 方法来组合 $ 设立操作和 $unset 操作:
var filter = Builders<Restaurant>.Filter .Eq("name", "Downtown Deli"); var combinedUpdate = Builders<Restaurant>.Update.Combine( Builders<Restaurant>.Update.Set("cuisine", "French"), Builders<Restaurant>.Update.Unset("borough") ); _restaurantsCollection.UpdateOne(filter, combinedUpdate);
var filter = Builders<Restaurant>.Filter .Eq("name", "Downtown Deli"); var combinedUpdate = Builders<Restaurant>.Update.Combine( Builders<Restaurant>.Update.Set("cuisine", "French"), Builders<Restaurant>.Update.Unset("borough") ); await _restaurantsCollection.UpdateOneAsync(filter, combinedUpdate);
更新管道
您可以将一系列更新操作连接到单个聚合管道中。
要创建更新管道,请调用 Builders.Update.Pipeline() 方法。 此方法接受以下参数:
Parameter | 说明 |
|---|---|
| 代表更新管道的 数据类型: |
Pipeline() 方法返回定义多个聚合阶段的单个 UpdateDefinition对象。
以下代码示例使用Pipeline() 方法来组合 $ 设立操作和 $unset 操作:
var filter = Builders<Restaurant>.Filter .Eq("name", "Downtown Deli"); var updatePipeline = Builders<Restaurant>.Update.Pipeline( PipelineDefinition<Restaurant, Restaurant>.Create( new BsonDocument("$set", new BsonDocument("cuisine", "French")), new BsonDocument("$unset", "borough") ) ); _restaurantsCollection.UpdateOne(filter, updatePipeline);
var filter = Builders<Restaurant>.Filter .Eq("name", "Downtown Deli"); var updatePipeline = Builders<Restaurant>.Update.Pipeline( PipelineDefinition<Restaurant, Restaurant>.Create( new BsonDocument("$set", new BsonDocument("cuisine", "French")), new BsonDocument("$unset", "borough") ) ); await _restaurantsCollection.UpdateOneAsync(filter, updatePipeline);
配置选项
UpdateOne() 和 UpdateOneAsync() 方法可以选择接受 UpdateOptions对象作为参数。 您可以使用此参数来配置更新操作。
UpdateOptions 类包含以下属性:
属性 | 说明 | ||||
|---|---|---|---|---|---|
| 指定针对数组字段的更新操作时要修改的数组元素。有关更多信息,请参阅 MongoDB Server 手册。 数据类型: IEnumerable<ArrayFilterDefinition> | ||||
| 指定更新操作是否绕过文档验证。这使您可以更新不满足模式验证要求的文档(如存在)。有关模式验证的更多信息,请参阅 MongoDB Server 手册。 数据类型: | ||||
| |||||
| 获取或设置用户提供的操作注释。有关更多信息,请参阅 MongoDB Server 手册。 数据类型: BsonValue | ||||
| 获取或设置用于扫描文档的索引。有关更多信息,请参阅 MongoDB Server 手册。 数据类型: BsonValue | ||||
| 指定如果没有文档与查询筛选条件匹配,更新操作是否执行更新或插入操作。有关更多信息,请参阅 MongoDB Server 手册。 数据类型: | ||||
| 如果查询选择了多个文档,则确定操作更新哪个文档,因为更新操作会按指定的排序顺序更新第一个文档。要设立此选项,您必须实例化一个 数据类型: | ||||
| 获取或设置 let 文档。有关更多信息,请参阅 MongoDB Server 手册。 数据类型: BsonDocument |
排序规则
要为操作配置排序规则,请创建 Collation 类的实例。
下表描述了 Collation 构造函数接受的参数。它还列出了相应的类属性,您可以使用这些属性读取每个设置的值。
Parameter | 说明 | 类属性 |
|---|---|---|
|
| |
| (可选)指定是否包括大小写比较。当此参数为 |
|
|
|
|
| (可选)指定要执行的比较级别,如 ICU |
|
|
| |
|
|
|
| (可选)指定当 |
|
|
|
|
| (可选)指定包含变音符号的字符串是否从后往前排序。数据类型: |
|
有关排序规则的更多信息,请参阅MongoDB Server手册中的排序规则页面。
返回值
UpdateOne() 方法返回 UpdateResult,UpdateOneAsync() 方法返回 Task<UpdateResult>对象。 UpdateResult 类包含以下属性:
属性 | 说明 |
|---|---|
| 指示更新操作是否由 MongoDB 确认。 数据类型: |
| 指示您是否可以读取 数据类型: |
| 与查询过滤匹配的文档数量,无论文档是否已更新。 数据类型: |
| 通过更新操作更新的文档数量。 数据类型: |
| 如果驱动程序执行了更新或插入,则在数据库中更新或插入的文档的 ID。 数据类型: BsonValue |
更多信息
有关更新操作的可运行示例,请参阅以下用法示例:
要学习;了解有关创建查询筛选器的更多信息,请参阅创建查询筛选器指南。
API 文档
有关本指南中讨论的任何方法或类型的更多信息,请参阅以下API文档: