对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

Delete Documents

在本指南中,您可以了解如何使用删除操作从 MongoDB 集合中删除文档。

本指南中的示例使用 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 将集合中的字段反序列化为 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

获取或设置对结果进行排序时要使用的语言排序规则类型。有关详细信息,请参阅本页的排序规则部分。

Comment

获取或设置操作的注释。有关详细信息,请参阅删除命令字段。

Hint

获取或设置用于扫描文档的索引。有关更多信息,请参阅删除语句。

Let

获取或设置 let文档。有关详细信息,请参阅删除命令字段。

要为操作配置排序规则,请创建 Collation 类的实例。

下表描述了 Collation 构造函数接受的参数。它还列出了相应的类属性,您可以使用这些属性读取每个设置的值。

Parameter
说明
类属性

locale

指定 Unicode 国际组件 (ICU)区域设置设置。有关支持的区域设置列表,请参阅MongoDB Server手册中的排序规则区域设置和默认参数。如果要使用简单的二进制比较,请使用

Collation.Simple 静态属性返回 Collation对象,并将
locale设立为"simple"。数据类型:string

Locale

caseLevel

(可选)指定是否包含大小写比较。

当此参数为 true 时,驱动程序的行为取决于 strength 参数的值:

- 如果 strength 为 CollationStrength.Primary,则驱动程序会比较基本字符和大小写。
- 如果 strength 为 CollationStrength.Secondary,则驱动程序会比较基本字符、变音符、其他次要差异和大小写。
- 如果 strength 为任何其他值,则会忽略此参数。

当此参数为 false 时,驱动程序不会在强度级别 Primary 或 Secondary 包含大小写比较。

数据类型:boolean
默认值:false

CaseLevel

caseFirst

CaseFirst

strength

(可选)指定要执行的比较级别,如 ICU

文档中所定义。数据类型:CollationStrength
默认值:CollationStrength.Tertiary

Strength

numericOrdering

(可选)指定驾驶员是否将数字字符串作为数字进行比较。如果此参数为

true,则驾驶员会将数字字符串作为数字进行比较。示例,在比较字符串 "10" 和和“2”,驾驶员会将这些值视为 10 和 2,并发现 10 更大。如果此参数为

false 或已排除,则驾驶员会将数字字符串作为字符串进行比较。示例,在比较字符串 "10" 和和“2”,驾驶员一次比较一个字符。因为 "1"小于“2”,则驾驶员会找到“10”小于“2”。有关更多信息,请参阅MongoDB



Server手册中的排序规则限制。数据类型:boolean
默认值:false

NumericOrdering

alternate



(可选)指定驾驶员是否将空格和标点符号视为基本字符以进行比较。数据类型:CollationAlternate
默认值:CollationAlternate.NonIgnorable(空格和标点符号被视为基本字符)

Alternate

maxVariable

(可选)指定当 alternate 参数为 CollationAlternate.Shifted

时驾驶员认为可忽略的字符。数据类型:CollationMaxVariable
默认值:CollationMaxVariable.Punctuation(驾驶员忽略标点符号和空格)

MaxVariable

normalization



(可选)指定驾驶员是否根据需要对文本进行规范化。大多数文本不需要规范化。有关规范化的更多信息,请参阅 ICU

文档。数据类型:boolean
默认值:false

Normalization

backwards

(可选)指定包含变音符号的字符串是否从字符串的后部到前部排序。

数据类型:boolean
默认:false

Backwards

有关排序规则的更多信息,请参阅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}");

提示

如果前面的示例使用的是 DeleteOne() 方法而不是 DeleteMany(),则驱动程序将删除26 个匹配文档中的第一个。

DeleteOne()和DeleteMany()方法返回DeleteResult类型。 此类型包含DeletedCount属性(指示已删除的文档数)和IsAcknowledged属性(指示结果是否得到确认)。 如果查询过滤与任何文档都不匹配,则不会删除任何文档,并且DeletedCount为0 。

有关删除操作的可运行示例,请参阅以下用法示例:

要进一步了解本指南所讨论的任何方法或类型,请参阅以下 API 文档: