delete

在本页面

Definition

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

限制删除的文件数

下面的示例通过指定1limitorders集合中删除一个status等于D的文档:

db.runCommand(
   {
      delete: "orders",
      deletes: [ { q: { status: "D" }, limit: 1 } ]
   }
)

返回的文档显示该命令已删除1文档。有关详情,请参见Output

{ "ok" : 1, "n" : 1 }

删除所有符合条件的文档

下面的示例通过指定0limitorders集合中删除status等于D的所有文档:

db.runCommand(
   {
      delete: "orders",
      deletes: [ { q: { status: "D" }, limit: 0 } ],
      writeConcern: { w: "majority", wtimeout: 5000 }
   }
)

返回的文档表明该命令已找到并删除了13个文档。有关详情,请参见Output

{ "ok" : 1, "n" : 13 }

从集合中删除所有文档

通过指定一个空查询条件*和0limit来删除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: 1, n: 1 }

以下是遇到错误的delete命令返回的示例文档:

{
   "ok" : 1,
   "n" : 0,
   "writeErrors" : [
      {
         "index" : 0,
         "code" : 10101,
         "errmsg" : "can't remove from a capped collection: test.cappedLog"
      }
   ]
}
首页