On this page
delete
在本页面
Definition
delete
- 2.6 版的新功能。
delete命令从集合中删除文档。单个delete命令可以包含多个删除规范。该命令无法在capped collections上操作。 MongoDB 驱动程序提供的删除方法在内部使用此命令。
delete命令具有以下语法:
{
delete: <collection>,
deletes: [
{ q : <query>, limit : <integer>, collation: <document> },
{ q : <query>, limit : <integer>, collation: <document> },
{ q : <query>, limit : <integer>, collation: <document> },
...
],
ordered: <boolean>,
writeConcern: { <write concern> }
}
该命令包含以下字段:
Field | Type | Description |
---|---|---|
delete |
string | 目标集合的名称。 |
deletes |
array | 要在指定集合中执行的一个或多个 delete 语句的数组。 |
ordered |
boolean | 可选的。如果true ,则当 delete 语句失败时,不执行其余的 delete 语句就返回。如果false ,则当 delete 语句失败时,请 continue 其余的 delete 语句(如果有)。默认为true 。 |
writeConcern |
document | 可选的。表示delete命令的write concern的文档。省略使用默认的写关注。 |
deletes
数组的每个元素包含以下字段:
Field | Type | Description |
---|---|---|
q |
document | 与要删除的文档匹配的查询。 |
limit |
integer | 要删除的匹配文档数。指定0 删除所有匹配的文档,或指定1 删除单个文档。 |
collation |
document | Optional. |
指定用于操作的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 版中的新功能。
Returns: | 包含操作状态的文档。有关详情,请参见Output。 |
---|
Behavior
deletes
数组中所有查询的总大小(即q
字段值)必须小于或等于BSON 文档的最大大小。
deletes
数组中的删除文档总数必须小于或等于maximum bulk size
。
Examples
限制删除的文件数
下面的示例通过指定1
的limit
从orders
集合中删除一个status
等于D
的文档:
db.runCommand(
{
delete: "orders",
deletes: [ { q: { status: "D" }, limit: 1 } ]
}
)
返回的文档显示该命令已删除1
文档。有关详情,请参见Output。
{ "ok" : 1, "n" : 1 }
删除所有符合条件的文档
下面的示例通过指定0
的limit
从orders
集合中删除status
等于D
的所有文档:
db.runCommand(
{
delete: "orders",
deletes: [ { q: { status: "D" }, limit: 0 } ],
writeConcern: { w: "majority", wtimeout: 5000 }
}
)
返回的文档表明该命令已找到并删除了13
个文档。有关详情,请参见Output。
{ "ok" : 1, "n" : 13 }
从集合中删除所有文档
通过指定一个空查询条件*和0
的limit
来删除orders
集合中的所有文档:
db.runCommand(
{
delete: "orders",
deletes: [ { q: { }, limit: 0 } ],
writeConcern: { w: "majority", wtimeout: 5000 }
}
)
返回的文档表明该命令总共找到并删除了35
个文档。有关详情,请参见Output。
{ "ok" : 1, "n" : 35 }
Bulk Delete
下面的示例对orders
集合执行多个删除操作:
db.runCommand(
{
delete: "orders",
deletes: [
{ q: { status: "D" }, limit: 0 },
{ q: { cust_num: 99999, item: "abc123", status: "A" }, limit: 1 }
],
ordered: false,
writeConcern: { w: 1 }
}
)
返回的文档显示该命令找到并删除了两个 delete 语句总共21
个文档。有关详情,请参见Output。
{ "ok" : 1, "n" : 21 }
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.runCommand({
delete: "myColl",
deletes: [
{ q: { category: "cafe", status: "a" }, limit: 0, collation: { locale: "fr", strength: 1 } }
]
})
Output
返回的文档包含以下字段的子集:
delete.
ok
- 命令的状态。
delete.
n
- 删除的文件数。
delete.
writeErrors
- 文档数组,其中包含有关删除操作期间遇到的任何错误的信息。 writeErrors数组包含每个错误的删除语句的错误文档。
每个错误文档均包含以下信息:
delete.writeErrors.
index
- 一个整数,用于标识
deletes
数组中的 delete 语句,该数组使用从零开始的索引。
- 一个整数,用于标识
delete.writeErrors.
code
- 标识错误的整数值。
delete.writeErrors.
errmsg
- 错误的描述。
delete.
writeConcernError
- 描述与写关注有关的错误的文档,其中包含以下字段:
delete.writeConcernError.
code
- 标识写关注错误原因的整数值。
delete.writeConcernError.
errmsg
- 写关注错误原因的描述。
以下是为成功的delete命令返回的示例文档:
{ ok: 1, n: 1 }
以下是遇到错误的delete命令返回的示例文档:
{
"ok" : 1,
"n" : 0,
"writeErrors" : [
{
"index" : 0,
"code" : 10101,
"errmsg" : "can't remove from a capped collection: test.cappedLog"
}
]
}