文档菜单
文档首页
/ / /
C#/.NET
/ / /

删除文档

本页内容

  • 概述
  • 示例数据
  • 删除操作
  • 删除一个文档
  • 删除多个文档
  • 参数
  • 示例
  • 返回值
  • 其他信息
  • API 文档

在这份指南中,您可以学习如何使用删除操作从MongoDB集合中删除文档。

本指南中的示例使用的是restaurants 集合,该集合来自 sample_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 类型允许您通过以下属性配置选项

属性
描述

排序规则

获取或设置在排序结果时使用的语言排序规则类型。有关更多信息,请参阅删除语句

注释

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

提示

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

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 文档

返回

修改