create

On this page本页内容

Definition定义

create

Explicitly creates a collection or view.显式创建集合或视图。

Note注意

The view created by this command does not refer to materialized views. 此命令创建的视图不引用具体化视图。For discussion of on-demand materialized views, see $merge instead.有关按需物化视图的讨论,请参阅$merge

create has the following form:具有以下形式:

Note注意
Starting in MongoDB 4.2从MongoDB 4.2开始

MongoDB removes the MMAPv1 storage engine and the MMAPv1 specific option flags for create.MongoDB删除了用于create的MMAPv1存储引擎和MMAPv2特定选项flags

{
  create: <collection or view name>,
  capped: <true|false>,
  timeseries: {
     timeField: <string>,
     metaField: <string>,
     granularity: <string>
  },
  expireAfterSeconds: <number>,
  autoIndexId: <true|false>,
  size: <max_size>,
  max: <max_documents>,
  storageEngine: <document>,
  validator: <document>,
  validationLevel: <string>,
  validationAction: <string>,
  indexOptionDefaults: <document>,
  viewOn: <source>,
  pipeline: <pipeline>,
  collation: <document>,
  writeConcern: <document>,
  comment: <any>
}

create has the following fields:具有以下字段:

Field字段Type类型Description描述
createstringThe name of the new collection or view. 新集合或视图的名称。See Naming Restrictions.请参见命名限制
cappedbooleanOptional. 可选。To create a capped collection, specify true. 若要创建封顶集合,请指定trueIf you specify true, you must also set a maximum size in the size field.如果指定true,则还必须在size字段中设置最大大小。
timeseries.timeFieldstringRequired when creating a time series collection. 创建时间序列集合时需要。The name of the field which contains the date in each time series document. 包含每个时间序列文档中日期的字段的名称。Documents in a time series collection must have a valid BSON date as the value for the timeField.时间序列集合中的文档必须具有有效的BSON日期作为timeField的值。
timeseries.metaFieldstring

Optional. 可选。The name of the field which contains metadata in each time series document. 每个时间序列文档中包含元数据的字段的名称。The metadata in the specified field should be data that is used to label a unique series of documents. 指定字段中的元数据应该是用于标记一系列唯一文档的数据。The metadata should rarely, if ever, change.元数据应该很少改变(如果有的话)。

The name of the specified field may not be _id or the same as the timeseries.timeField. 指定字段的名称不能是_id,也不能与timeseries.timeField相同。The field can be of any type except array.字段可以是除数组之外的任何类型。

timeseries.granularitystringOptional. 可选。Possible values are "seconds" (default), "minutes", and "hours". 可能的值为"seconds"(默认值)、"minutes""hours"Set the granularity to the value that is the closest match to the time span between consecutive incoming measurements. 将粒度设置为与连续传入测量之间的时间跨度最接近的值。Setting the granularity parameter accurately improves performance by optimizing how data in the time series collection is stored internally.通过优化时间序列集合中数据的内部存储方式,设置granularity参数可以准确地提高性能。
expireAfterSecondsnumberOptional. 可选。Enable the automatic deletion of documents in a time series collection by specifying the number of seconds after which documents expire. 通过指定文档过期的秒数,启用时间序列集合中文档的自动删除。MongoDB deletes expired documents automatically.MongoDB会自动删除过期文档。
autoIndexIdboolean

Optional. 可选。Specify false to disable the automatic creation of an index on the _id field.指定false以禁用在_id字段上自动创建索引。

Important重要

Starting in MongoDB 4.0, you cannot set the option autoIndexId to false when creating collections in databases other than the local database.从MongoDB 4.0开始,在local数据库以外的数据库中创建集合时,不能将选项autoIndexId设置为false

Deprecated since version 3.2.

sizeintegerOptional. 可选。Specify a maximum size in bytes for a capped collection. 指定上限集合的最大大小(以字节为单位)。Once a capped collection reaches its maximum size, MongoDB removes the older documents to make space for the new documents. 一旦有上限的集合达到其最大大小,MongoDB就会删除旧文档,为新文档腾出空间。The size field is required for capped collections and ignored for other collections.size字段对于有上限的集合是必需的,而对于其他集合则被忽略。
maxintegerOptional. 可选。The maximum number of documents allowed in the capped collection. 上限集合中允许的最大文档数。The size limit takes precedence over this limit. size限制优先于此限制。If a capped collection reaches the size limit before it reaches the maximum number of documents, MongoDB removes old documents. 如果有上限的集合在达到最大文档数之前达到了size限制,MongoDB将删除旧文档。If you prefer to use the max limit, ensure that the size limit, which is required for a capped collection, is sufficient to contain the maximum number of documents.如果您希望使用max限制,请确保有上限集合所需的size限制足以包含最大数量的文档。
storageEnginedocument

Optional. 可选。Available for the WiredTiger storage engine only.仅适用于WiredTiger存储引擎。

Allows users to specify configuration to the storage engine on a per-collection basis when creating a collection. 允许用户在创建集合时按每个集合指定存储引擎的配置。The value of the storageEngine option should take the following form:storageEngine选项的值应采用以下形式:

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

Storage engine configuration specified when creating collections are validated and logged to the oplog during replication to support replica sets with members that use different storage engines.创建集合时指定的存储引擎配置将在复制期间验证并记录oplog中,以支持具有使用不同存储引擎的成员的副本集。

validatordocument

Optional. 可选。Allows users to specify validation rules or expressions for the collection. 允许用户为集合指定验证规则或表达式For more information, see Schema Validation.有关详细信息,请参阅架构验证

The validator option takes a document that specifies the validation rules or expressions. validator选项接受指定验证规则或表达式的文档。You can specify the expressions using the same operators as the query operators with the exception of $near, $nearSphere, $text, and $where.除了$near$nearSphere$text$where之外,可以使用与查询运算符相同的运算符指定表达式。

Note注意
  • Validation occurs during updates and inserts. Existing documents do not undergo validation checks until modification.在更新和插入期间进行验证。现有文件在修改之前不会进行验证检查。
  • You cannot specify a validator for collections in the admin, local, and config databases.不能为adminlocalconfig数据库中的集合指定验证器。
  • You cannot specify a validator for system.* collections.不能为system.*集合指定验证器。
validationLevelstring

Optional. 可选。Determines how strictly MongoDB applies the validation rules to existing documents during an update.确定MongoDB在更新期间对现有文档应用验证规则的严格程度。

validationLevelDescription描述
"off"No validation for inserts or updates.没有插入或更新的验证。
"strict"Default默认值。 Apply validation rules to all inserts and all updates.将验证规则应用于所有插入和所有更新。
"moderate"Apply validation rules to inserts and to updates on existing validdocuments. 将验证规则应用于现有有效文档的插入和更新。Do not apply rules to updates on existing invaliddocuments.不要将规则应用于现有无效文档的更新。
validationActionstring

Optional. 可选。Determines whether to error on invalid documents or just warn about the violations but allow invalid documents to be inserted.确定是在无效文档上出错,还是仅警告违规,但允许插入无效文档。

Important重要

Validation of documents only applies to those documents as determined by the validationLevel.文档验证仅适用于由validationLevel确定的那些文档。

validationActionDescription描述
"error"Default违约 Documents must pass validation before the write occurs. 在写入之前,文档必须通过验证。Otherwise, the write operation fails.否则,写入操作将失败。
"warn"Documents do not have to pass validation. 文档不必通过验证。If the document fails validation, the write operation logs the validation failure.如果文档未通过验证,写入操作将记录验证失败。
indexOptionDefaultsdocument

Optional. 可选。Allows users to specify a default configuration for indexes when creating a collection.允许用户在创建集合时指定索引的默认配置。

The indexOptionDefaults option accepts a storageEngine document, which should take the following form:indexOptionDefaults选项接受storageEngine文档,该文档应采用以下格式:

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

Storage engine configuration specified when creating indexes are validated and logged to the oplog during replication to support replica sets with members that use different storage engines.创建索引时指定的存储引擎配置将在复制期间验证并记录到oplog中,以支持具有使用不同存储引擎的成员的副本集。

viewOnstring

The name of the source collection or view from which to create the view. 要从中创建视图的源集合或视图的名称。The name is not the full namespace of the collection or view; i.e. does not include the database name and implies the same database as the view to create. 该名称不是集合或视图的完整命名空间;即不包含数据库名称,并暗示与要创建的视图相同的数据库。You must create views in the same database as the source collection.必须在与源集合相同的数据库中创建视图。

See also db.createView().另请参见db.createView()

pipelinearray

An array that consists of the aggregation pipeline stage(s). 聚合管道阶段组成的数组。create creates the view by applying the specified pipeline to the viewOn collection or view.通过将指定的pipeline应用于viewOn集合或视图来创建视图。

The view definition pipeline cannot include the $out or the $merge stage. 视图定义pipeline不能包含$out$merge阶段。If the view definition includes nested pipeline (e.g. the view definition includes $lookup or $facet stage), this restriction applies to the nested pipelines as well.如果视图定义包含嵌套管道(例如,视图定义包含$lookup$facet阶段),则此限制也适用于嵌套管道。

The view definition is public; i.e. db.getCollectionInfos() and explain operations on the view will include the pipeline that defines the view. 视图定义是公共的;亦即视图上的db.getCollectionInfos()explain操作将包括定义视图的管道。As such, avoid referring directly to sensitive fields and values in view definitions.因此,避免直接引用视图定义中的敏感字段和值。

See also db.createView().另请参见db.createView()

collation

Specifies the default collation for the collection or the view.指定集合或视图的默认排序规则。

Collation allows users to specify language-specific rules for string comparison, such as rules for lettercase and accent marks.排序规则允许用户指定字符串比较的特定语言规则,例如字母大小写和重音符号规则。

The collation option has the following syntax:排序规则选项具有以下语法:

collation: {
   locale: <string>,
   caseLevel: <boolean>,
   caseFirst: <string>,
   strength: <int>,
   numericOrdering: <boolean>,
   alternate: <string>,
   maxVariable: <string>,
   backwards: <boolean>
}

When specifying collation, the locale field is mandatory; all other collation fields are optional. 指定排序规则时,locale字段是必填的;所有其他排序规则字段都是可选的。For descriptions of the fields, see Collation Document.有关字段的说明,请参阅排序规则文档

If you specify a collation at the collection level:如果在集合级别指定排序规则:

  • Indexes on that collection will be created with that collation unless the index creation operation explicitly specify a different collation.除非索引创建操作显式指定不同的排序规则,否则将使用该排序规则创建该集合上的索引。
  • Operations on that collection use the collection's default collation unless they explicitly specify a different collation.对该集合的操作使用集合的默认排序规则,除非它们显式指定不同的排序规则。

    You cannot specify multiple collations for an operation. For example, you cannot specify different collations per field, or if performing a find with a sort, you cannot use one collation for the find and another for the sort.不能为一个操作指定多个排序规则。例如,不能为每个字段指定不同的排序规则,或者如果使用排序执行查找,则不能为查找使用一个排序规则,为排序使用另一个排序。

If no collation is specified for the collection or for the operations, MongoDB uses the simple binary comparison used in prior versions for string comparisons.如果没有为集合或操作指定排序规则,MongoDB将使用早期版本中使用的简单二进制比较进行字符串比较。

For a view, if no collation is specified, the view's default collation is the "simple" binary comparison collator. 对于视图,如果未指定排序规则,则视图的默认排序规则是“简单”二进制比较排序规则。For a view on a collection, the view does not inherit the collection's collation settings. 对于集合上的视图,该视图不继承集合的排序规则设置。For a view on another view, the to be created view must specify the same collation settings.对于另一视图上的视图,要创建的视图必须指定相同的排序规则设置。

After you create the collection or the view, you cannot update its default collation.创建集合或视图后,无法更新其默认排序规则。

For an example that specifies the default collation during the creation of a collection, see Specify Collation.有关在创建集合期间指定默认排序规则的示例,请参阅指定排序规则

writeConcerndocument

Optional. 可选。A document that expresses the write concern for the operation. 表示操作的写入关注点的文档。Omit to use the default write concern.忽略使用默认的写入问题。

When issued on a sharded cluster, mongos converts the write concern of the create command and its helper db.createCollection() to "majority".当在分片集群上发出时,mongos将create命令及其助手dbcreateCollection()写入关注点转换为"majority"

commentany

Optional. 可选。A user-provided comment to attach to this command. 用户提供了附加到此命令的注释。Once set, this comment appears alongside records of this command in the following locations:设置后,此注释将与此命令的记录一起显示在以下位置:

A comment can be any valid BSON type(string, integer, object, array, etc).注释可以是任何有效的BSON类型(字符串、整数、对象、数组等)。

New in version 4.4.在版本4.4中新增

The db.createCollection() method and the db.createView() method wrap the create command.db.createCollection()方法和db.createView()方法包装create命令。

Behavior行为

Resource Locking资源锁定

Changed in version 4.2.在版本4.2中更改

create obtains an exclusive lock on the specified collection or view for the duration of the operation. 在操作期间获取指定集合或视图的独占锁。All subsequent operations on the collection must wait until create releases the lock. 对集合的所有后续操作都必须等到create释放锁。create typically holds this lock for a short time.通常保持该锁很短时间。

Creating a view requires obtaining an additional exclusive lock on the system.views collection in the database. 创建视图需要获得数据库中system.views集合的额外独占锁。This lock blocks creation or modification of views in the database until the command completes.此锁将阻止在数据库中创建或修改视图,直到命令完成。

Prior to MongoDB 4.2, create obtained an exclusive lock on the parent database, blocking all operations on the database andall its collections until the operation completed.在MongoDB 4.2之前,create获得了父数据库的独占锁,在操作完成之前阻止对数据库及其所有集合的所有操作。

Transactions

Changed in version 4.4.在版本4.4中更改

Starting in MongoDB 4.4, you can create collections and indexes inside a multi-document transaction if the transaction is not a cross-shard write transaction.从MongoDB 4.4开始,如果事务不是跨分片写入事务,则可以在多文档事务中创建集合和索引。

To use create in a transaction, the transaction must use read concern "local". 要在事务中使用create,事务必须使用读取关注点"local"If you specify a read concern level other than "local", the transaction fails.如果指定的读取关注级别不是"local",则事务将失败。

Stable API

Changed in version 5.0.在版本5.0中更改

When using Stable API V1, you cannot specify the following fields in a create command:使用Stable API V1时,不能在create命令中指定以下字段:

  • autoIndexId
  • capped
  • indexOptionDefaults
  • max
  • size
  • storageEngine

Access Control访问控制

If the deployment enforces authentication/authorization, create requires the following privileges:如果部署强制执行身份验证/授权,则create需要以下权限:

Task任务Required Privileges所需权限
Create a non-capped collection创建非封顶集合

createCollection on the database, or数据库上的createCollection,或

insert on the collection to create在要创建的集合上的insert

Create a capped collection创建封顶集合

convertToCapped for the collection集合的convertToCapped

createCollection on the database数据库上的createCollection

Create a view创建视图

createCollection on the database.数据库上的createCollection

However, if the user has the createCollection on the database and find on the view to create, the user must also have the following additional permissions:但是,如果用户在数据库上具有createCollection并在要创建的视图上find,则用户还必须具有以下附加权限:

  • find on the source collection or view.在源集合或视图中find
  • find on any other collections or views referenced in the pipeline, if any.findpipeline中引用的任何其他集合或视图(如果有的话)。

A user with the readWrite built in role on the database has the required privileges to run the listed operations. 数据库中具有readWrite内置角色的用户具有运行所列操作所需的权限。Either create a user with the required role or grant the role to an existing user.创建具有所需角色的用户,或将该角色授予现有用户

Examples示例

Create a Capped Collection创建封顶集合

To create a capped collection limited to 64 kilobytes, issue the command in the following form:要创建限制为64 KB的封顶集合,请按以下格式发出命令:

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

Create a Time Series Collection创建时间序列集合

To create a time series collection that captures weather data for the past 24 hours, issue this command:要创建捕获过去24小时天气数据的时间序列集合,请发出以下命令:

db.createCollection(
    "weather24h",
    {
       timeseries: {
          timeField: "timestamp",
          metaField: "data",
          granularity: "hours"
       },
       expireAfterSeconds: 86400
    }
)
Note注意

In this example expireAfterSeconds is specified as 86400 which means documents expire 86400 seconds after the timestamp value. 在此示例中,expireAfterSeconds指定为86400,这意味着文档在timestamp值之后86400秒过期。See Set up Automatic Removal for Time Series Collections (TTL).请参见设置时间序列集合(TTL)的自动删除

Create a View创建视图

Note注意

The view created by this command does not refer to materialized views. 此命令创建的视图不引用物化视图。For discussion of on-demand materialized views, see $merge instead.有关按需物化视图的讨论,请参阅$merge

Changed in version 4.2.在版本4.2中更改

The view definition pipeline cannot include the $out or the $merge stage. 视图定义pipeline不能包含$out$merge阶段。If the view definition includes nested pipeline (e.g. the view definition includes $lookup or $facet stage), this restriction applies to the nested pipelines as well.如果视图定义包含嵌套管道(例如,视图定义包含$lookup$facet阶段),则此限制也适用于嵌套管道。

To create a view using the create command, use the following syntax:要使用create命令创建视图,请使用以下语法:

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

or if specifying a collation:或者如果指定排序规则:

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

For example, given a collection survey with the following documents:例如,给定一份包含以下文档的集合调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" }

The following operation creates a managementRatings view with the _id, feedback.management, and department fields:以下操作使用_idfeedback.managementdepartment字段创建managementRatings视图:

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

The view definition is public; i.e. db.getCollectionInfos() and explain operations on the view will include the pipeline that defines the view. 视图定义是公共的;亦即视图上的db.getCollectionInfos()explain操作将包括定义视图的管道。As such, avoid referring directly to sensitive fields and values in view definitions.因此,避免直接引用视图定义中的敏感字段和值。

Tip提示
See also: 参阅:

Specify Collation指定排序规则

You can specify collation at the collection or view level. 可以在集合或视图级别指定排序规则For example, the following operation creates a collection, specifying a collation for the collection (See Collation Document for descriptions of the collation fields):例如,以下操作创建集合,为集合指定排序规则(有关排序规则字段的说明,请参阅排序规则文档):

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

This collation will be used by indexes and operations that support collation unless they explicitly specify a different collation. 支持排序规则的索引和操作将使用此排序规则,除非它们明确指定不同的排序规则。For example, insert the following documents into myColl:例如,在myColl中插入以下文档:

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

The following operation uses the collection's collation:以下操作使用集合的排序规则:

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

The operation returns documents in the following order:该操作按以下顺序返回文档:

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

The same operation on a collection that uses simple binary collation (i.e. no specific collation set) returns documents in the following order:对使用简单二进制排序规则(即没有特定的排序规则集)的集合执行相同的操作将按以下顺序返回文档:

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

Specify Storage Engine Options指定存储引擎选项

You can specify collection-specific storage engine configuration options when you create a collection with db.createCollection(). 使用db.createCollection()创建集合时,可以指定特定于集合的存储引擎配置选项。Consider the following operation:考虑以下操作:

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

This operation creates a new collection named users with a specific configuration string that MongoDB will pass to the wiredTiger storage engine. 此操作将创建一个名为users的新集合,其中包含MongoDB将传递给wiredTiger存储引擎的特定配置字符串。See the WiredTiger documentation of collection level options for specific wiredTiger options.有关特定WiredTiger选项,请参阅WiredTiger集合级选项文档

←  convertToCappedcreateIndexes →