db.collection.remove()

在本页面

Definition

db.collection.remove()方法可以具有两种语法之一。 remove()方法可以获取查询文档和一个可选的justOne布尔值:

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

或者该方法可以获取查询文档和可选的删除选项文档:

2.6 版的新功能。

db.collection.remove(
   <query>,
   {
     justOne: <boolean>,
     writeConcern: <document>,
     collation: <document>
   }
)
Parameter Type Description
query document 使用query operators指定删除条件。要删除集合中的所有文档,请传递一个空文档({})。


在 2.6 版中更改:在以前的版本中,没有查询参数的调用方法删除了集合中的所有文档。
| justOne |布尔值|可选。要将删除限制为仅一个文档,请设置为true。忽略使用默认值false并删除所有符合删除条件的文档。
| writeConcern |文档|可选。表示write concern的文档。省略使用默认的写关注。参见Write Concern
2.6 版中的新功能。
| collation |文档|可选。
指定用于操作的collation
Collation允许用户为字符串比较指定特定于语言的规则,例如字母大写和重音符号的规则。
排序规则选项具有以下语法:
collation: {
locale: <string>,
caseLevel: <boolean>,
caseFirst: <string>,
strength: <int>,
numericOrdering: <boolean>,
alternate: <string>,
maxVariable: <string>,
backwards: <boolean>
}
指定排序规则时,locale字段为必填字段;所有其他排序规则字段都是可选的。有关字段的说明,请参见Collation Document
如果未指定排序规则,但是集合具有默认排序规则(请参见db.createCollection()),则该操作将使用为集合指定的排序规则。
如果没有为集合或操作指定排序规则,则 MongoDB 使用先前版本中使用的简单二进制比较进行字符串比较。
您不能为一个操作指定多个排序规则。例如,您不能为每个字段指定不同的排序规则,或者如果对排序执行查找,则不能对查找使用一种排序规则,而对排序使用另一种排序规则。
3.4 版中的新功能。

在 2.6 版中进行了更改:remove()返回一个包含操作状态的对象。

Returns: 包含操作状态的WriteResult对象。

Behavior

Write Concern

在 2.6 版中进行了更改。

remove()方法使用delete命令,该命令使用默认的write concern。要指定其他写关注点,请在 options 参数中包括写关注点。

Query Considerations

默认情况下,remove()删除所有与query表达式匹配的文档。指定justOne选项可将操作限制为删除单个文档。要删除按指定 Sequences 排序的单个文档,请使用findAndModify()方法。

当删除多个文档时,删除操作可能会与其他对集合的读取和/或写入操作交错。

Capped Collections

您不能将remove()方法与capped collection一起使用。

Sharded Collections

指定justOne选项的分片集合的所有remove()操作必须在查询规范中包含shard key _id字段。在分片集合中指定justOneremove()操作不包含shard key_id字段都将返回错误。

Examples

以下是remove()方法的示例。

从集合中删除所有文档

要删除集合中的所有文档,请使用空的查询文档{}调用remove方法。以下操作从bios collection删除所有文档:

db.bios.remove( { } )

此操作不等同于drop()方法。

要从集合中删除所有文档,使用drop()方法删除整个集合(包括索引),然后重新创建集合并重建索引,可能会更有效。

删除所有符合条件的文档

要删除符合删除条件的文档,请使用<query>参数调用remove()方法:

以下操作从集合products中删除所有文档,其中qty大于20

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

覆盖默认写问题

对副本集的以下操作从集合_中删除所有文档,其中qty大于20并指定"w: majority"write concernwtimeout为 5000 毫秒,以便该方法在写入传播到大多数有表决权的副本集之后返回成员或方法在 5 秒钟后超时。

在版本 3.0 中进行了更改:在以前的版本中,majority引用了副本集的所有成员的大多数,而不是多数投票成员。

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

删除符合条件的单个文档

要删除符合删除条件的第一个文档,请使用query条件并将justOne参数设置为true1来调用remove方法。

以下操作从集合products中删除第一个文档,其中qty大于20

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

Specify Collation

3.4 版的新功能。

Collation允许用户为字符串比较指定特定于语言的规则,例如字母大写和重音符号的规则。

集合myColl具有以下文档:

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

以下操作包括collation选项:

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

WriteResult

在 2.6 版中进行了更改。

Successful Results

remove()返回包含操作状态的WriteResult对象。成功后,WriteResult对象包含有关已删除文档数的信息:

WriteResult({ "nRemoved" : 4 })

写关注错误

如果remove()方法遇到写关注错误,则结果包括WriteResult.writeConcernError字段:

WriteResult({
   "nRemoved" : 21,
   "writeConcernError" : {
      "code" : 64,
      "errInfo" : {
         "wtimeout" : true
      },
      "errmsg" : "waiting for replication timed out"
   }
})

与写入问题无关的错误

如果remove()方法遇到非写关注错误,则结果包括WriteResult.writeError字段:

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