On this page
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()方法具有以下参数:
Parameter | Type | Description |
---|---|---|
name |
string | 要创建的集合的名称。参见Naming Restrictions。 |
options |
document | 可选的。用于创建有上限的集合,用于在新集合中预分配空间或用于创建视图的配置选项。 |
options
文档包含以下字段:
Field | Type | Description |
---|---|---|
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
限制足以容纳最大数量的文档。
| 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]
验证在更新和插入期间进行。现有文档在进行修改之前不会进行验证检查。
> 您无法为admin
,local
和config
数据库中的集合指定验证器。
> 您无法为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 collection | convertToCapped的集合 createCollection在数据库上 |
创建view | createCollection在数据库上 or createCollection在数据库上和 find在源集合/视图上 or createCollection在数据库上,find在要创建的视图上,和 find在源集合/视图上 在数据库上具有createCollection且在视图上具有find的用户没有足够的特权。 |
readWrite内置角色包含必需的特权。或者,您可以创建一个自定义角色支持db.createCollection()。
下面的示例使用db.createUser()方法在admin
数据库中创建一个用户,该用户在inventory
和employees
数据库中具有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
选项中指定的条件进行比较。根据validationLevel
和validationAction
,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é" }
See also
指定存储引擎选项
3.0 版中的新功能。
使用db.createCollection()创建集合时,可以指定特定于集合的存储引擎配置选项。请考虑以下操作:
db.createCollection(
"users",
{ storageEngine: { wiredTiger: { configString: "<option>=<setting>" } } }
)
此操作将创建一个名为users
的新集合,该集合具有一个特定的配置字符串,MongoDB 将传递给wiredTiger
存储引擎。有关特定的wiredTiger
选项,请参见收集级别选项的 WiredTiger 文档。