On this page本页内容
mongosh
方法This method is deprecated in 此方法在mongosh
. mongosh
中已弃用。For alternative methods, see Compatibility Changes with Legacy mongo Shell.有关其他方法,请参阅与旧mongo
Shell的兼容性更改。
db.collection.remove()
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:或者该方法可以采用查询文档和可选的移除选项文档:
Changed in version 5.0.在版本5.0中更改。
db.collection.remove( <query>, { justOne: <boolean>, writeConcern: <document>, collation: <document>, let: <document> // Added in MongoDB 5.0 } )
query | document | {} ).{} )。 |
justOne | boolean | true . true 。false and delete all documents matching the deletion criteria.false 并删除所有符合删除条件的文档。
|
writeConcern | document |
|
collation | document |
collation: { locale: <string>, caseLevel: <boolean>, caseFirst: <string>, strength: <int>, numericOrdering: <boolean>, alternate: <string>, maxVariable: <string>, backwards: <boolean> }
|
let | document |
{ <variable_name_1>: <expression_1>, ..., <variable_name_n>: <expression_n> }
|
The remove()
returns an object that contains the status of the operation.remove()
返回包含操作状态的对象。
WriteResult 对象。 |
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
参数中包含写关注点。
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.移除多个文档时,移除操作可能会与对集合的其他读取和/或写入操作交错。
You cannot use the 不能将remove()
method with a capped collection.remove()
方法用于封顶集合。
You cannot use the 不能对时间序列集合使用remove()
method on a time series collection.remove()
方法。
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
字段。
在不包含shard键或remove()
operations specifying justOne: true
in a sharded collection which do not contain either the shard key or the _id
field return an error._id
字段的分片集合中指定justOne:true
的remove()
操作返回错误。
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.要将写关注点用于事务,请参阅事务和写关注点。
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大小限制),请参阅生产注意事项。
The following are examples of the 下面是remove()
method.remove()
方法的示例。
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()
方法删除整个集合(包括索引),然后重新创建集合并重新生成索引可能会更有效。
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 } } )
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: 2
with a wtimeout
of 5000 milliseconds. products
中删除所有qty
大于20
的文档,并指定写入关注点w:2
,wtimeout
为5000毫秒。This operation either returns after the write propagates to both the primary and one secondary, or times out after 5 seconds.此操作要么在写入传播到主服务器和一个辅助服务器之后返回,要么在5秒后超时。
db.products.remove( { qty: { $gt: 20 } }, { writeConcern: { w: "majority", wtimeout: 5000 } } )
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
.justOne
参数设置为true
或1
的情况下调用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 )
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 } } )
let
let
中使用变量New in version 5.0.在版本5.0中新增。
To define variables that you can access elsewhere in the command, use the let option.要定义可以在命令的其他地方访问的变量,请使用let
选项。
To filter results using a variable, you must access the variable within the 要使用变量筛选结果,必须在$expr
operator.$expr
运算符中访问变量。
Create a collection 创建集合cakeFlavors
:cakeFlavors
:
db.cakeFlavors.insertMany( [ { _id: 1, flavor: "chocolate" }, { _id: 2, flavor: "strawberry" }, { _id: 3, flavor: "cherry" } ] )
The following example defines a 以下示例在targetFlavor
variable in let
and uses the variable to delete the strawberry cake flavor:let
中定义了targetFlavor
变量,并使用该变量删除草莓蛋糕风味:
db.cakeFlavors.remove( { $expr: { $eq: [ "$flavor", "$$targetFlavor" ] } }, { let : { targetFlavor: "strawberry" } } )
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 })
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" } } } })
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" } })