db.collection.remove()

On this page本页内容

Definition定义

db.collection.remove()

mongo Shell Method

This page documents the mongo shell method, and does not refer to the MongoDB Node.js driver (or any other driver) method. 本页记录了mongo shell方法,未提及MongoDB Node.js驱动程序(或任何其他驱动程序)方法。For corresponding MongoDB driver API, refer to your specific MongoDB driver documentation instead.有关相应的MongoDB驱动程序API,请参阅特定的MongoDB驱动程序文档。

Removes documents from a collection.从集合中删除文档。

The db.collection.remove() method can have one of two syntaxes. db.collection.remove()方法可以有两个语法之一。The remove() method can take a query document and an optional justOne boolean:remove()方法可以接受查询文档和可选的justOne布尔值:

db.collection.remove(
   <query>,
   <justOne>
)

Or the method can take a query document and an optional remove options document:或者,该方法可以获取查询文档和可选的删除选项文档:

db.collection.remove(
   <query>,
   {
     justOne: <boolean>,
     writeConcern: <document>,
     collation: <document>
   }
)
Parameter参数Type类型Description描述
query document Specifies deletion criteria using query operators. 使用查询运算符指定删除条件。To delete all documents in a collection, pass an empty document ({}).要删除集合中的所有文档,请传递一个空文档({})。
justOne boolean Optional.可选。To limit the deletion to just one document, set to true. 要将删除限制为仅一个文档,请设置为trueOmit to use the default value of false and delete all documents matching the deletion criteria.忽略使用默认值false并删除所有符合删除条件的文档。
writeConcern document

Optional.可选。A document expressing the write concern. 表达写入关注点的文档。Omit to use the default write concern. 忽略使用默认的写关注点。See Write Concern.请参阅写入关注

Do not explicitly set the write concern for the operation if run in a transaction. 如果在事务中运行,请不要显式设置操作的写入关注点。To use write concern with transactions, see Transactions and Write Concern.要将写关注点用于事务,请参阅事务和写关注点

collation document

Optional.可选。

Specifies the collation to use for the operation.指定要用于该操作的排序规则

Collation allows users to specify language-specific rules for string comparison, such as rules for lettercase and accent marks.允许用户为字符串比较指定特定于语言的规则,例如字母大小写和重音符号的规则。

The collation option has the following syntax:collation选项语法如下所示:

collation: {
   locale: <string>,
   caseLevel: <boolean>,
   caseFirst: <string>,
   strength: <int>,
   numericOrdering: <boolean>,
   alternate: <string>,
   maxVariable: <string>,
   backwards: <boolean>
}

When specifying collation, the locale field is mandatory; all other collation fields are optional. 指定排序规则时,locale字段是必需的;所有其他排序规则字段都是可选的。For descriptions of the fields, see Collation Document.有关这些字段的描述,请参阅排序规则文档

If the collation is unspecified but the collection has a default collation (see db.createCollection()), the operation uses the collation specified for the collection.如果未指定排序规则,但集合具有默认排序规则(请参见db.createCollection()),则操作将使用为集合指定的排序规则。

If no collation is specified for the collection or for the operations, MongoDB uses the simple binary comparison used in prior versions for string comparisons.如果没有为集合或操作指定排序规则,MongoDB将使用以前版本中用于字符串比较的简单二进制比较。

You cannot specify multiple collations for an operation. 不能为一个操作指定多个排序规则。For example, you cannot specify different collations per field, or if performing a find with a sort, you cannot use one collation for the find and another for the sort.例如,不能为每个字段指定不同的排序规则,或者如果使用排序执行查找,则不能对查找使用一种排序规则,对排序使用另一种排序规则。

New in version 3.4.版本3.4中的新功能。

The remove() returns an object that contains the status of the operation.remove()返回一个包含操作状态的对象。

Returns:返回:A WriteResult object that contains the status of the operation.包含操作状态的WriteResult对象。

Behavior行为

Write Concern写入关注点

The remove() method uses the delete command, which uses the default write concern. remove()方法使用delete命令,该命令使用默认的写关注点To specify a different write concern, include the write concern in the options parameter.要指定不同的写入关注点,请在options参数中包含写入关注点。

Query Considerations查询注意事项

By default, remove() removes all documents that match the query expression. 默认情况下,remove()删除与query表达式匹配的所有文档。Specify the justOne option to limit the operation to removing a single document. 指定justOne选项以将操作限制为删除单个文档。To delete a single document sorted by a specified order, use the findAndModify() method.要删除按指定顺序排序的单个文档,请使用findAndModify()方法。

When removing multiple documents, the remove operation may interleave with other read and/or write operations to the collection.删除多个文档时,删除操作可能会与对集合的其他读取和/或写入操作交织。

Capped Collections封顶集合

You cannot use the remove() method with a capped collection.不能对封顶集合使用remove()方法。

Sharded Collections分片集合

All remove() operations for a sharded collection that specify the justOne: true option must include the shard key or the _id field in the query specification. 指定justOne:true选项的分片集合的所有remove()操作必须包括查询规范中的分片键_id字段。remove() operations specifying justOne: true in a sharded collection which do not contain either the shard key or the _id field return an error.remove()在不包含分片键_id字段的分片集合中指定justOne:true的操作将返回错误。

Transactions事务

db.collection.remove() can be used inside multi-document transactions.可以在多文档事务中使用。

Do not explicitly set the write concern for the operation if run in a transaction. 如果在事务中运行,请不要显式设置操作的写入关注点。To use write concern with transactions, see Transactions and Write Concern.要将写关注点用于事务,请参阅事务和写关注点

Important重要的

In most cases, multi-document transaction incurs a greater performance cost over single document writes, and the availability of multi-document transactions should not be a replacement for effective schema design. 在大多数情况下,与单文档写入相比,多文档事务会带来更大的性能成本,而多文档事务的可用性不应取代有效的模式设计。For many scenarios, the denormalized data model (embedded documents and arrays) will continue to be optimal for your data and use cases. 对于许多场景,非规范化数据模型(嵌入式文档和数组)将继续适合您的数据和用例。That is, for many scenarios, modeling your data appropriately will minimize the need for multi-document transactions.也就是说,对于许多场景,适当地建模数据将最大限度地减少对多文档事务的需求。

For additional transactions usage considerations (such as runtime limit and oplog size limit), see also Production Considerations.有关其他事务使用注意事项(如运行时限制和oplog大小限制),请参阅生产注意事项

Examples示例

The following are examples of the remove() method.下面是remove()方法的示例。

Remove All Documents from a Collection从集合中删除所有文档

To remove all documents in a collection, call the remove method with an empty query document {}. 要删除集合中的所有文档,请使用空查询文档{}调用remove()方法。The following operation deletes all documents from the bios collection:以下操作将从bios集合中删除所有文档:

db.bios.remove( { } )

This operation is not equivalent to the drop() method.此操作与drop()方法不同。

To remove all documents from a collection, it may be more efficient to use the drop() method to drop the entire collection, including the indexes, and then recreate the collection and rebuild the indexes.要从集合中删除所有文档,使用drop()方法删除整个集合(包括索引),然后重新创建集合并重建索引可能会更有效。

Remove All Documents that Match a Condition删除所有符合条件的文档

To remove the documents that match a deletion criteria, call the remove() method with the <query> parameter:要删除符合删除条件的文档,请使用<query>参数调用remove()方法:

The following operation removes all the documents from the collection products where qty is greater than 20:以下操作将从products集合中删除qty大于20的所有文档:

db.products.remove( { qty: { $gt: 20 } } )

Override Default Write Concern覆盖默认写关注点

The following operation to a replica set removes all the documents from the collection products where qty is greater than 20 and specifies a write concern of "w: majority" with a wtimeout of 5000 milliseconds such that the method returns after the write propagates to a majority of the voting replica set members or the method times out after 5 seconds.对副本集的以下操作将从qty大于20的集合products中删除所有文档,并指定一个"w: majority"写入关注点wtimeout为5000毫秒,这样,该方法在写入传播到大多数投票副本集成员后返回,或该方法在5毫秒后超时几秒钟。

db.products.remove(
    { qty: { $gt: 20 } },
    { writeConcern: { w: "majority", wtimeout: 5000 } }
)

Remove a Single Document that Matches a Condition删除符合条件的单个文档

To remove the first document that match a deletion criteria, call the remove method with the query criteria and the justOne parameter set to true or 1.要删除与删除条件匹配的第一个文档,请在query条件和justOne参数设置为true1的情况下调用remove方法。

The following operation removes the first document from the collection products where qty is greater than 20:以下操作将从products集合中删除qty大于20的第一个文档:

db.products.remove( { qty: { $gt: 20 } }, true )

Specify Collation指定排序规则

New in version 3.4.版本3.4中的新功能。

Collation allows users to specify language-specific rules for string comparison, such as rules for lettercase and accent marks.允许用户为字符串比较指定特定于语言的规则,例如字母大小写和重音符号的规则。

A collection myColl has the following documents:myColl集合包含以下文档:

{ _id: 1, category: "café", status: "A" }
{ _id: 2, category: "cafe", status: "a" }
{ _id: 3, category: "cafE", status: "a" }

The following operation includes the collation option:以下操作包括collation选项:

db.myColl.remove(
   { category: "cafe", status: "A" },
   { collation: { locale: "fr", strength: 1 } }
)

WriteResult

Successful Results成功的结果

The remove() returns a WriteResult object that contains the status of the operation. remove()返回一个WriteResult对象,该对象包含操作的状态。Upon success, the WriteResult object contains information on the number of documents removed:成功后,WriteResult对象包含有关删除的文档数的信息:

WriteResult({ "nRemoved" : 4 })

See also参阅

WriteResult.nRemoved

Write Concern Errors写关注点错误

If the remove() method encounters write concern errors, the results include the WriteResult.writeConcernError field:如果remove()方法遇到写问题错误,结果包括WriteResult.writeConcernError字段:

WriteResult({
  "nRemoved" : 7,
  "writeConcernError" : {
    "code" : 64,
    "codeName" : "WriteConcernFailed",
    "errmsg" : "waiting for replication timed out",
    "errInfo" : {
      "wtimeout" : true,
      "writeConcern" : {    // Added in MongoDB 4.4
        "w" : "majority",
        "wtimeout" : 1,
        "provenance" : "getLastErrorDefaults"
      }
    }
  }
})

Errors Unrelated to Write Concern与写关注点无关的错误

If the remove() method encounters a non-write concern error, the results include WriteResult.writeError field:如果remove()方法遇到非写问题错误,结果包括WriteResult.writeError字段:

WriteResult({
   "nRemoved" : 0,
   "writeError" : {
      "code" : 2,
      "errmsg" : "unknown top level operator: $invalidFieldName"
   }
})