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"
}
]
}