MongoDB的删除操作
文章目录
示例集合
此页面使用以下MongoDB Go驱动程序功能:
|
|
删除所有文件
若要删除集合中的所有文档,请将空的 筛选器文档传递给 Collection.DeleteMany函数。
|
|
一旦成功执行后, Collection.DeleteMany 函数返回的一个实例 DeleteResult其 DeletedCount属性包含匹配过滤的文件数量。
删除所有符合条件的文档
您可以指定标准或过滤器,以标识要删除的文档。该过滤器使用相同的语法,读操作。
若要删除所有符合删除条件的文档,请将过滤器参数传递给 Collection.DeleteMany函数。
下面的示例删除集合中所有status字段等于"A"的文档:
|
|
一旦成功执行后, Collection.DeleteMany 函数返回的一个DeleteResult实例,其DeletedCount属性包含匹配过滤的文件数量。
仅删除一个符合条件的文档
要最多删除一个与指定过滤器匹配的文档(即使多个文档可能与指定过滤器匹配),请使用 Collection.DeleteOne函数。
下面的示例删除第一个status为"D"的文档:
|
|
删除特性
索引
即使从集合中删除所有文档,删除操作也不会删除索引。
原子性
MongoDB中的所有写操作都是单个文档级别的原子操作。
写确认
对于写入问题,您可以指定MongoDB向写入操作请求的确认级别。。
MongoShell方法
db.collection.deleteOne
此页面记录了mongoshell方法,并且 没有引用MongoDB Node.js驱动程序(或任何其他驱动程序)方法。对于相应的MongoDB驱动程序API,请改为参考您特定的 MongoDB驱动程序文档。
从集合中删除单个文档。
|
|
| 参数 | 类型 | 描述 |
|---|---|---|
| filter | 文档 | 使用查询运算符指定删除条件。指定一个空文档以删除集合中返回的第一个文档。{ } |
| writeConcern | 文档 | 可选的。表达写关注。省略使用默认的写关注。如果在事务中运行,则不要为操作明确设置写关注点。 |
| collation | 文档 | 可选的。指定 用于操作的排序规则。归类允许用户为字符串比较指定特定于语言的规则,例如字母大写和重音符号的规则。排序规则选项具有以下语法:{locale: <string>,caseLevel: <boolean>,caseFirst: <string>,strength: <int>,numericOrdering: <boolean>,alternate: <string>,maxVariable: <string>,backwards: <boolean>}指定排序规则时,该locale字段为必填字段;所有其他排序规则字段都是可选的。有关字段的说明,请参见整理文档。如果未指定排序规则,但是集合具有默认排序规则(请参阅参考资料db.createCollection()),则该操作将使用为集合指定的排序规则。如果没有为集合或操作指定排序规则,则MongoDB使用先前版本中使用的简单二进制比较进行字符串比较。您不能为一个操作指定多个排序规则。例如,您不能为每个字段指定不同的排序规则,或者如果对排序执行查找,则不能对查找使用一种排序规则,而对排序使用另一种排序规则。 |
返回值:
- acknowledged,true是在运行时带有写关注关系,false是禁用了写关注关系
- deletedCount 包含已删除文件的数量
特性
删除次序
db.collection.deleteOne删除与过滤器匹配的第一个文档。使用作为唯一索引一部分的字段,例如_id 进行精确删除。
封顶集合
db.collection.deleteOne()WriteError如果在封顶上使用,则抛出异常。要从上限集合中删除文档,请db.collection.drop()改用。
封顶集合:一个固定大小的集合,当其达到最大大小时会自动覆盖其最早的条目。复制中使用的MongoDB操作日志是一个有上限的集合。请参阅上限集合。
事务
db.collection.deleteOne()可以在多文档事务中使用。
如果在事务中运行,则不要为操作明确设置写关注点。
重要
在大多数情况下,与单文档写入相比,多文档事务产生的性能成本更高,并且多文档事务的可用性不应代替有效的架构设计。在许多情况下, 非规范化数据模型(嵌入式文档和数组)对于您的数据和用例将继续是最佳的。也就是说,在许多情况下,对数据进行适当的建模将最大程度地减少对多文档交易的需求。
有关其他事务使用方面的注意事项(例如运行时限制和oplog大小限制),另请参见 生产注意事项。
例子
删除单个文档
该orders集合包含具有以下结构的文档:
|
|
以下操作使用删除订单:_id: ObjectId(“563237a41a4d68582c2509da”)
|
|
该操作返回:
|
|
以下操作删除expiryts大于ISODate(“2015-11-01T12:40:15Z”)的第一个文档
|
|
该操作返回:
|
|
带有Write Concern的deleteOne()
给定三个成员的副本集,以下操作指定w为majority,wtimeout为100:
|
|
如果确认花费的时间超过wtimeout限制,则会引发以下异常:
|
|
指定归类
3.4版的新功能。
归类允许用户为字符串比较指定特定于语言的规则,例如字母大写和重音符号的规则。
集合myColl包含以下文档:
|
|
以下操作包括排序规则 选项:
|
|
db.collection.deleteMany()
此页面记录了mongoshell方法,并且 没有引用MongoDB Node.js驱动程序(或任何其他驱动程序)方法。对于相应的MongoDB驱动程序API,请改为参考您特定的 MongoDB驱动程序文档。
从集合中删除多个文档。
|
|
| 参数 | 类型 | 描述 |
|---|---|---|
| filter | 文档 | 使用查询运算符指定删除条件。指定一个空文档以删除集合中返回的第一个文档。{ } |
| writeConcern | 文档 | 可选的。表达写关注。省略使用默认的写关注。如果在事务中运行,则不要为操作明确设置写关注点。 |
| collation | 文档 | 可选的。指定 用于操作的排序规则。归类允许用户为字符串比较指定特定于语言的规则,例如字母大写和重音符号的规则。排序规则选项具有以下语法:{locale: <string>,caseLevel: <boolean>,caseFirst: <string>,strength: <int>,numericOrdering: <boolean>,alternate: <string>,maxVariable: <string>,backwards: <boolean>}指定排序规则时,该locale字段为必填字段;所有其他排序规则字段都是可选的。有关字段的说明,请参见整理文档。如果未指定排序规则,但是集合具有默认排序规则(请参阅参考资料db.createCollection()),则该操作将使用为集合指定的排序规则。如果没有为集合或操作指定排序规则,则MongoDB使用先前版本中使用的简单二进制比较进行字符串比较。您不能为一个操作指定多个排序规则。例如,您不能为每个字段指定不同的排序规则,或者如果对排序执行查找,则不能对查找使用一种排序规则,而对排序使用另一种排序规则。 |
返回值:
- acknowledged,true是在运行时带有写关注关系,false是禁用了写关注关系
- deletedCount 包含已删除文件的数量
特性
封顶集合
db.collection.deleteMany()WriteError如果在上限集合上使用,则抛出异常。要从上限集合中删除所有文档,请db.collection.drop()改用。
删除单个文档
要删除单个文档,请改用db.collection.deleteOne()。
或者,使用作为唯一索引一部分的字段,例如 _id。
事务
db.collection.deleteMany()可以在多文档事务中使用。
如果在事务中运行,则不要为操作明确设置写关注点。
重要
在大多数情况下,与单文档写入相比,多文档事务产生的性能成本更高,并且多文档事务的可用性不应代替有效的架构设计。在许多情况下, 非规范化数据模型(嵌入式文档和数组)对于您的数据和用例将继续是最佳的。也就是说,在许多情况下,对数据进行适当的建模将最大程度地减少对多文档交易的需求。
例子
删除多个文档
该orders集合包含具有以下结构的文档:
|
|
以下操作将删除所有文档,其中:client : "Crude Traders Inc."
|
|
该操作返回:
|
|
下面的操作将删除所有文件,其中:stock : “Brent Crude Futures"和limit大于48.88
|
|
该操作返回:
|
|
具有写关注的deleteMany()
给定一个三成员副本集,以下操作指定 w:majority和wtimeout:100:
|
|
如果确认花费的时间超过wtimeout限制,则会引发以下异常:
|
|
指定归类
归类允许用户为字符串比较指定特定于语言的规则,例如字母大写和重音符号的规则。
集合myColl包含以下文档:
|
|
以下操作包括排序规则 选项:
|
|
文章作者 Forz
上次更新 2020-05-11