db.createCollection()

在本页面

Definition

  • db. createCollection(* name options *)

    • 在版本 3.4 中进行了更改:添加了对以下内容的支持:
  • 创建视图(另请参见db.createView())。

  • Collation.

创建一个新集合或view

由于在命令中首次引用集合时,MongoDB 会隐式创建一个集合,因此此方法主要用于创建使用特定选项的新集合。例如,您使用db.createCollection()创建capped collection或创建使用document validation的新集合。

db.createCollection()是数据库命令create的包装。

db.createCollection()方法具有以下原型形式:

db.createCollection(<name>, { capped: <boolean>,
                              autoIndexId: <boolean>,
                              size: <number>,
                              max: <number>,
                              storageEngine: <document>,
                              validator: <document>,
                              validationLevel: <string>,
                              validationAction: <string>,
                              indexOptionDefaults: <document>,
                              viewOn: <string>,
                              pipeline: <pipeline>,
                              collation: <document> } )

db.createCollection()方法具有以下参数:

ParameterTypeDescription
namestring要创建的集合的名称。参见Naming Restrictions
optionsdocument可选的。用于创建有上限的集合,用于在新集合中预分配空间或用于创建视图的配置选项。

options文档包含以下字段:

FieldTypeDescription
cappedboolean可选的。要创建capped collection,请指定true。如果指定true,则还必须在size字段中设置最大大小。
autoIndexIdboolean可选的。指定false以禁用在_id字段上自动创建索引。


Important





对于副本集,请勿将autoIndexId设置为false



从 3.2 版开始不推荐使用。
| size |数字|可选。指定上限集合的最大大小(以字节为单位)。一旦上限集合达到最大大小,MongoDB 就会删除较旧的文档以为新文档腾出空间。上限集合必须是size字段,其他集合则必须忽略。
| max |数字|可选。上限集合中允许的最大文档数。 size限制优先于此限制。如果有上限的集合在达到最大文档数之前达到size限制,则 MongoDB 会删除旧文档。如果您喜欢使用max限制,请确保有上限的集合所需的size限制足以容纳最大数量的文档。
| usePowerOf2Sizes |布尔值|可选。仅适用于 MMAPv1 存储引擎。
从 3.0 版开始不推荐使用:对于 MMAPv1 存储引擎,除非noPadding选项为true,否则所有集合都使用2 个大小分配的力量usePowerOf2Sizes选项不会影响分配策略。
| noPadding |布尔值|可选。仅适用于 MMAPv1 存储引擎。
3.0 版中的新增功能:noPadding标志为集合禁用2 个大小分配的力量。将noPadding标志设置为 true 时,分配策略不包括额外的空间来容纳文档增长,因此,文档增长将导致新的分配。用于工作负荷为仅插入或就地更新(例如递增计数器)的集合。
默认为false

[!NOTE|label:Warning]




如果工作负荷包括删除或任何可能导致文档增长的更新,请不要设置noPadding。有关更多信息,请参见无填充分配策略



|
| storageEngine |文档|可选。仅适用于 WiredTiger 存储引擎。

> 3.0 版中的新功能。

> 允许用户在创建集合时基于每个集合为存储引擎指定配置。 storageEngine选项的值应采用以下形式:

> { <storage-engine-name>: <options> }

> 在创建集合时指定的存储引擎配置将在复制过程中得到验证,并记录到oplog上,以支持具有使用不同存储引擎的成员的副本集。
| validator |文档|可选。允许用户为集合指定验证规则或表达式。有关更多信息,请参见Schema Validation

> 3.2 版中的新功能。

> validator选项采用一个指定验证规则或表达式的文档。您可以使用与query operators相同的运算符来指定表达式,但$geoNear$near$nearSphere$text$where除外。

> [!NOTE|label:Note]




验证在更新和插入期间进行。现有文档在进行修改之前不会进行验证检查。

> 您无法为adminlocalconfig数据库中的集合指定验证器。

> 您无法为system.*个集合指定验证器。



|
| validationLevel |字符串|可选。确定在更新过程中 MongoDB 对验证规则应用到现有文档的严格程度。

> 3.2 版中的新功能。

> | validationLevel |描述

> | "off" |不验证插入或更新。 |

> | "strict" | 默认 将验证规则应用于所有插入和所有更新。 |

> | "moderate" |将验证规则应用于现有* valid 文档的插入和更新。不要将规则应用于现有无效*文档的更新。 ||
| validationAction |字符串|可选。确定是对无效文档error还是仅对违规warn,但允许插入无效文档。

> 3.2 版中的新功能。

> [!TIP|label:Important]




文件验证仅适用于validationLevel确定的文件。



| validationAction |描述
| "error" | 默认 文件必须在写入之前通过验证。否则,写入操作将失败。 |
| "warn" |文件不必通过验证。如果文档验证失败,则写操作将记录验证失败。 ||
| indexOptionDefaults |文档|可选。允许用户在创建集合时为索引指定默认配置。
indexOptionDefaults选项接受storageEngine文档,该文档应采用以下格式:
{ <storage-engine-name>: <options> }
在复制期间验证在创建索引时指定的存储引擎配置,并将其记录到oplog上,以支持具有使用不同存储引擎的成员的副本集。
版本 3.2 中的新功能。
| viewOn | string |从中创建视图的源集合或视图的名称。名称不是集合或视图的完整名称空间;即不包含数据库名称,而是暗示与要创建的视图相同的数据库。您必须在与源集合相同的数据库中创建视图。
另请参见db.createView()
3.4 版中的新功能。
| pipeline | array |由聚合管道阶段组成的数组。 db.createView通过将指定的pipeline应用于viewOn集合或视图来创建视图。
视图定义是公共的;即视图上的db.getCollectionInfos()explain操作将包括定义视图的管道。因此,请避免在视图定义中直接引用敏感字段和值。
另请参见db.createView()
3.4 版中的新功能。
| collation | document |为集合指定默认的collation
Collation允许用户为字符串比较指定特定于语言的规则,例如字母大写和重音符号的规则。
排序规则选项具有以下语法:
collation: {
locale: <string>,
caseLevel: <boolean>,
caseFirst: <string>,
strength: <int>,
numericOrdering: <boolean>,
alternate: <string>,
maxVariable: <string>,
backwards: <boolean>
}
指定排序规则时,locale字段为必填字段;所有其他排序规则字段都是可选的。有关字段的说明,请参见Collation Document
如果您在集合级别指定排序规则:
除非索引创建操作显式指定其他排序规则,否则将使用该排序规则创建该集合上的索引。
该集合上的操作使用集合的默认排序规则,除非它们明确指定其他排序规则。
您不能为一个操作指定多个排序规则。例如,您不能为每个字段指定不同的排序规则,或者如果对排序执行查找,则不能对查找使用一种排序规则,而对排序使用另一种排序规则。
如果没有为集合或操作指定排序规则,则 MongoDB 使用先前版本中使用的简单二进制比较进行字符串比较。
对于集合,您只能在集合创建期间指定排序规则。设置后,您将无法修改集合的默认排序规则。
有关示例,请参见Specify Collation
3.4 版中的新功能。

Access Control

如果部署实施authentication/authorization,则db.createCollection()需要以下特权:

Required Privileges
创建一个无上限的集合createCollection在数据库上,

insert在要创建的集合上
创建capped collectionconvertToCapped的集合
createCollection在数据库上
创建viewcreateCollection在数据库上
or
createCollection在数据库上 find在源集合/视图上
or
createCollection在数据库上,find在要创建的视图上, find在源集合/视图上
在数据库上具有createCollection且在视图上具有find的用户没有足够的特权。

readWrite内置角色包含必需的特权。或者,您可以创建一个自定义角色支持db.createCollection()

下面的示例使用db.createUser()方法在admin数据库中创建一个用户,该用户在inventoryemployees数据库中具有readWrite角色:

db.getSiblingDB("admin").createUser(
  {
    "user" : "createViewUser",
    "pwd" : "replaceThisWithASecurePassword",
    "roles" : [
      { "db" : "inventory", "role" : "readWrite" },
      { "db" : "employees", "role" : "readWrite" }
    ]
  }
)

创建的用户可以在指定的数据库上执行db.createCollection()。有关创建用户的更多示例,请参见Add Users

或者,您可以使用db.grantRolesToUser()将所需角色添加到现有用户。有关向现有数据库用户添加特权的教程,请参见修改现有用户的访问权限

Examples

创建上限集合

封顶的集合具有最大的大小或文档数,可防止其增长到超过最大阈值。所有设置上限的集合必须指定最大大小,并且还可以指定最大文档数。如果集合在达到最大文档数之前达到最大大小限制,则 MongoDB 会删除较旧的文档。考虑以下示例:

db.createCollection("log", { capped : true, size : 5242880, max : 5000 } )

此命令将创建一个名为log的集合,该集合的最大大小为 5 MB,最多 5000 个文档。

有关上限集合的更多信息,请参见Capped Collections

使用文档验证创建集合

3.2 版中的新功能。

具有验证的集合将每个插入或更新的文档与validator选项中指定的条件进行比较。根据validationLevelvalidationAction,MongoDB 要么返回警告,要么在文档不符合指定条件时拒绝插入或更新文档。

以下示例使用 JSON 模式验证器创建contacts集合:

Note

MongoDB 3.6 添加了$jsonSchema运算符以支持 JSON 模式验证。

db.createCollection( "contacts", {
   validator: { $jsonSchema: {
      bsonType: "object",
      required: [ "phone" ],
      properties: {
         phone: {
            bsonType: "string",
            description: "must be a string and is required"
         },
         email: {
            bsonType : "string",
            pattern : "@mongodb\.com$",
            description: "must be a string and match the regular expression pattern"
         },
         status: {
            enum: [ "Unknown", "Incomplete" ],
            description: "can only be one of the enum values"
         }
      }
   } }
} )

使用验证器后,以下插入操作将使验证失败:

db.contacts.insert( { name: "Amanda", status: "Updated" } )

该方法在WriteResult中返回错误:

WriteResult({
   "nInserted" : 0,
   "writeError" : {
      "code" : 121,
      "errmsg" : "Document failed validation"
   }
})

有关更多信息,请参见Schema Validation。要查看集合的验证规范,请使用db.getCollectionInfos()方法。

Specify Collation

3.4 版的新功能。

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

您可以在集合或view级别指定collation。例如,以下操作创建一个集合,为该集合指定排序规则(有关排序规则字段的描述,请参见Collation Document):

db.createCollection( "myColl", { collation: { locale: "fr" } } );

除非它们明确指定其他排序规则,否则支持排序规则的索引和操作将使用此排序规则。例如,将以下文档插入myColl

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

以下操作使用集合的归类:

db.myColl.find().sort( { category: 1 } )

该操作按以下 Sequences 返回文档:

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

使用简单二进制排序规则(即没有特定的排序规则集)的集合上的相同操作将按以下 Sequences 返回文档:

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

指定存储引擎选项

3.0 版中的新功能。

使用db.createCollection()创建集合时,可以指定特定于集合的存储引擎配置选项。请考虑以下操作:

db.createCollection(
   "users",
   { storageEngine: { wiredTiger: { configString: "<option>=<setting>" } } }
)

此操作将创建一个名为users的新集合,该集合具有一个特定的配置字符串,MongoDB 将传递给wiredTiger存储引擎。有关特定的wiredTiger选项,请参见收集级别选项的 WiredTiger 文档