Overview
在本指南中,您可以了解如何使用删除操作从 MongoDB 集合中删除文档。
样本数据
本指南中的示例使用 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 集群并加载此示例数据。
删除操作
使用删除操作来删除与查询过滤器匹配的文档。查询过滤器根据查询过滤器文档中的标准决定选择删除哪些记录。您可以通过以下方法在 MongoDB 中执行删除操作:
DeleteOne(),删除与查询筛选器匹配的第一个文档DeleteMany(),删除与查询筛选器匹配的所有文档
删除一个文档
以下代码演示如何使用同步 DeleteOne() 方法或异步 DeleteOneAsync() 方法删除一个文档。
var result = _restaurantsCollection.DeleteOne(filter);
var result = await _restaurantsCollection.DeleteOneAsync(filter);
删除多个文档
以下代码演示如何使用同步 DeleteMany() 方法或异步 DeleteManyAsync() 方法删除所有匹配的文档。
var result = _restaurantsCollection.DeleteMany(filter);
var result = await _restaurantsCollection.DeleteManyAsync(filter);
提示
在附加信息下方,使用这些方法查找可运行的示例。
参数
DeleteOne()和DeleteMany()方法要求您传递查询过滤,指定要匹配的文档。 有关如何构建查询过滤的更多信息,请参阅查询文档教程。
这两种方法都可以选择采用 DeleteOptions 类型作为附加参数,该参数表示可用于配置删除操作的选项。如果您不指定任何 DeleteOptions 属性,驱动程序将不会自定义删除操作。
DeleteOptions 类型允许您使用以下属性配置选项:
排序规则
要为操作配置排序规则,请创建 Collation 类的实例。
下表描述了 Collation 构造函数接受的参数。它还列出了相应的类属性,您可以使用这些属性读取每个设置的值。
Parameter | 说明 | 类属性 |
|---|---|---|
| 指定国际化组件字符集 (ICU) 区域设置。有关支持的区域设置列表,请参阅 MongoDB Server 手册中的 排序规则区域设置和默认参数。 |
|
| (可选)指定是否包含大小写比较。 |
|
| (可选)指定三级比较期间大小写差异的排序顺序。 |
|
| (可选) 指定要执行的比较级别,如 ICU 文档 中所定义。 |
|
| (可选)指定驱动程序是将数字字符串作为数字还是字符串进行比较。 |
|
| (可选) 指定驱动程序是否将空格和标点视为比较的基本字符。 |
|
| (可选)指定当 |
|
|
|
|
| (可选)指定包含变音符号的字符串是否从字符串的后部到前部排序。 |
|
有关排序规则的更多信息,请参阅MongoDB Server手册中的排序规则页面。
例子
以下代码使用 DeleteMany() 方法搜索“borough_1”索引,并删除 address.street 字段值包含短语“Pearl Street”的所有文档:
var filter = Builders<Restaurant>.Filter .Regex("address.street", "Pearl Street"); DeleteOptions opts = new DeleteOptions { Hint = "borough_1" }; Console.WriteLine("Deleting documents..."); var result = _restaurantsCollection.DeleteMany(filter, opts); Console.WriteLine($"Deleted documents: {result.DeletedCount}"); Console.WriteLine($"Result acknowledged? {result.IsAcknowledged}");
Deleting documents... Deleted documents: 26 Result acknowledged? True
提示
如果前面的示例使用的是 DeleteOne() 方法而不是 DeleteMany(),则驱动程序将删除26 个匹配文档中的第一个。
返回值
DeleteOne()和DeleteMany()方法返回DeleteResult类型。 此类型包含DeletedCount属性(指示已删除的文档数)和IsAcknowledged属性(指示结果是否得到确认)。 如果查询过滤与任何文档都不匹配,则不会删除任何文档,并且DeletedCount为0 。
更多信息
有关删除操作的可运行示例,请参阅以下用法示例:
API 文档
要进一步了解本指南所讨论的任何方法或类型,请参阅以下 API 文档: