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

Delete Documents

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

本指南中的示例使用 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 集群并加载这些示例数据。

使用删除操作来删除与查询过滤器匹配的文档。查询过滤器根据查询过滤器文档中的标准决定选择删除哪些记录。您可以通过以下方法在 MongoDB 中执行删除操作:

  • DeleteOne(),删除与查询筛选器匹配的第一个文档

  • DeleteMany(),删除与查询筛选器匹配的所有文档

以下代码演示了如何使用异步 DeleteOneAsync() 方法或同步 DeleteOne() 方法删除一个文档。

var result = await _restaurantsCollection.DeleteOneAsync(filter);
var result = _restaurantsCollection.DeleteOne(filter);

以下代码演示如何使用异步DeleteManyAsync()方法或同步DeleteMany()方法删除所有匹配的文档。

var result = await _restaurantsCollection.DeleteManyAsync(filter);
var result = _restaurantsCollection.DeleteMany(filter);

提示

附加信息下方,使用这些方法查找可运行的示例。

DeleteOne()DeleteMany()方法要求您传递查询过滤,指定要匹配的文档。 有关如何构建查询过滤的更多信息,请参阅查询文档教程。

这两种方法都可以选择采用 DeleteOptions 类型作为附加参数,该参数表示可用于配置删除操作的选项。如果您不指定任何 DeleteOptions 属性,驱动程序将不会自定义删除操作。

DeleteOptions 类型允许您使用以下属性配置选项:

属性
说明

Collation

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

Comment

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

Hint

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

Let

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

以下代码使用 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 文档: