删除文档
概述
在这份指南中,您可以学习如何使用删除操作从MongoDB集合中删除文档。
示例数据
本指南中的示例使用的是restaurants
集合,该集合来自 sample_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 提供的示例数据集。有关如何创建免费 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
类型允许您通过以下属性配置选项
示例
以下代码使用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 文档