create

在本页面

Definition

明确创建一个集合或视图。 create的格式如下:

{
  create: <collection or view name>,
  capped: <true|false>,
  autoIndexId: <true|false>,
  size: <max_size>,
  max: <max_documents>,
  flags: <0|1|2|3>,
  storageEngine: <document>,
  validator: <document>,
  validationLevel: <string>,
  validationAction: <string>,
  indexOptionDefaults: <document>,
  viewOn: <source>,
  pipeline: <pipeline>,
  collation: <document>,
  writeConcern: <document>
}

create具有以下字段:

Field Type Description
create string 新集合或视图的名称。参见Naming Restrictions
capped boolean 可选的。要创建capped collection,请指定true。如果指定true,则还必须在size字段中设置最大大小。
autoIndexId boolean 可选的。指定false以禁用在_id字段上自动创建索引。


Important





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



从 3.2 版开始不推荐使用。
| size |整数|可选。指定上限集合的最大大小(以字节为单位)。一旦上限集合达到最大大小,MongoDB 就会删除较旧的文档以为新文档腾出空间。上限集合必须是size字段,其他集合则必须忽略。
| max |整数|可选。上限集合中允许的最大文档数。 size限制优先于此限制。如果有上限的集合在达到最大文档数之前达到size限制,则 MongoDB 会删除旧文档。如果您喜欢使用max限制,请确保有上限的集合所需的size限制足以容纳最大数量的文档。
| flags |整数|可选。 MMAPv1 存储引擎仅可用于设置usePowerOf2SizesnoPadding标志。要设置,请指定以下值之一:
0对应于设置为falseusePowerOf2Sizes标志和设置为falsenoPadding标志。
1对应于设置为trueusePowerOf2Sizes标志和设置为falsenoPadding标志。
2对应于设置为falseusePowerOf2Sizes标志和设置为truenoPadding标志。
3对应于设置为trueusePowerOf2Sizes标志和设置为truenoPadding标志。

[!NOTE|label:Note]




MongoDB 3.0 忽略usePowerOf2Sizes标志。有关更多信息,请参见collModdb.createCollection()



默认为1
2.6 版的新功能。
在 3.0.0 版中进行了更改:添加了对设置新noPadding标志的支持。

[!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 |由聚合管道阶段组成的数组。 create通过将指定的pipeline应用于viewOn集合或视图来创建视图。
视图定义是公共的;即视图上的db.getCollectionInfos()explain操作将包括定义视图的管道。因此,请避免在视图定义中直接引用敏感字段和值。
另请参见db.createView()
3.4 版中的新功能。
| collation | |为集合或视图指定默认的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 版中的新功能。
| writeConcern |文档|可选。表示该操作的write concern的文档。忽略使用默认的写关注。

db.createCollection()方法和db.createView()方法包装create命令。

Considerations

create命令在受影响的数据库上获得了写锁定,并将阻止其他操作,直到完成为止。该操作的写锁定通常是短暂的。但是,分配给上限较大的 collections 可能需要更长的时间。

Access Control

如果部署实施authentication/authorization,则create需要以下特权:

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

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

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

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

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

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

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

Examples

创建上限集合

要创建一个限制为 64 KB 的capped collection,请发出以下格式的命令:

db.runCommand( { create: "collection", capped: true, size: 64 * 1024 } )

创建视图

3.4 版的新功能。

要使用create命令创建view,请使用以下语法:

db.runCommand( { create: <view>, viewOn: <source>, pipeline: <pipeline> } )

或如果指定排序规则:

db.runCommand( { create: <view>, viewOn: <source>, pipeline: <pipeline>, collation: <collation> } )

例如,给定集合survey包含以下文档:

{ _id: 1, empNumber: "abc123", feedback: { management: 3, environment: 3 }, department: "A" }
{ _id: 2, empNumber: "xyz987", feedback: { management: 2, environment: 3 }, department: "B" }
{ _id: 3, empNumber: "ijk555", feedback: { management: 3, environment: 4 }, department: "A" }

以下操作使用_idfeedback.managementdepartment字段创建一个managementRatings视图:

db.runCommand ( {
   create: "managementFeedback",
   viewOn: "survey",
   pipeline: [ { $project: { "management": "$feedback.management", department: 1 } } ]
} )

Important

视图定义是公共的;即视图上的db.getCollectionInfos()explain操作将包括定义视图的管道。因此,请避免在视图定义中直接引用敏感字段和值。

See also

db.createView()

Specify Collation

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

db.runCommand ( {
   create: "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.runCommand( {
    create: "users",
    storageEngine: { wiredTiger: { configString: "<option>=<setting>" } }
} )

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

首页