collMod
在本页面
Definition
collMod
- collMod使得可以向集合中添加选项或修改视图定义。该命令采用以下原型形式:
db.runCommand( { collMod: <collection or view>, <option1>: <value1>, <option2>: <value2> ... } )
对于<collection or view>
,指定当前数据库中的集合或视图的名称。
使用db.collection.stats()输出中的userFlags字段检查为集合启用的选项。
Options
TTL Collections
index
- index选项更改TTL Collection的到期时间。
用以下格式的文档指定键或索引名称,以及新的到期时间:
{keyPattern: <index_spec> || name: <index_name>, expireAfterSeconds: <seconds> }
在此示例中,<index_spec>
是集合中的现有索引。如果多个索引具有相同的键模式,则要求用户按名称指定索引。 seconds
是从当前时间减去的秒数。
成功collMod返回一个文档,其中字段expireAfterSeconds_old
和expireAfterSeconds_new
设置为各自的值。
失败时,如果不存在expireAfterSeconds
字段,则collMod返回带有no expireAfterSeconds field to update
的文档;如果指定的keyPattern
不存在,则返回cannot find index { **key**: 1.0 } for ns **namespace**
。
Record Allocation
noPadding
- 3.0 版中的新功能。
noPadding仅适用于 MMAPv1 存储引擎。
noPadding禁用集合的记录填充。没有填充,记录分配大小对应于文档大小,并且导致文档增长的任何更新都将需要新的分配。
usePowerOf2Sizes
- 从 3.0 版开始不推荐使用。
usePowerOf2Sizes仅适用于 MMAPv1 存储引擎。
usePowerOf2Sizes对分配策略没有影响。 MongoDB 3.0 使用2 分配的力量作为 MMAPv1 的默认记录分配策略。
要为集合禁用2 分配的力量,请将collMod命令与noPadding选项一起使用,或将db.createCollection()方法与noPadding
选项一起使用。有关更多信息,请参见MMAPv1 记录分配行为更改。
Document Validation
validator
- 3.2 版中的新功能。
validator允许用户为集合指定验证规则或表达式。有关更多信息,请参见Schema Validation。
validator
选项采用一个指定验证规则或表达式的文档。您可以使用与query operators相同的运算符来指定表达式,但$geoNear
,$near,$nearSphere,$text和$where除外。
Note
-
验证在更新和插入期间进行。现有文档在进行修改之前不会进行验证检查。
-
您无法为
admin
,local
和config
数据库中的集合指定验证器。 -
您无法为
system.*
个集合指定验证器。
validationLevel
- 3.2 版中的新功能。
validationLevel确定在更新期间 MongoDB 将验证规则严格应用于现有文档的严格程度。
validationLevel |
Description |
---|---|
"off" |
不验证插入或更新。 |
"strict" |
默认 将验证规则应用于所有插入和所有更新。 |
"moderate" |
将验证规则应用于现有* valid 文档的插入和更新。不要将规则应用于现有无效*文档的更新。 |
validationAction
- 3.2 版中的新功能。
validationAction选项确定是对无效文档error
还是对违规仅warn
,但允许无效文档。
Important
文件验证仅适用于validationLevel
确定的文件。
validationAction |
Description |
---|---|
"error" |
默认 文件必须在写入之前通过验证。否则,写入操作将失败。 |
"warn" |
文件不必通过验证。如果文档验证失败,则写操作将记录验证失败。 |
要查看集合的验证规范,请使用db.getCollectionInfos()方法。
Views
如果在运行带有访问控制的 MongoDB 部署上修改视图,则为必需。
pipeline
如果在运行带有访问控制的 MongoDB 部署上修改视图,则为必需。
视图定义是公共的;即视图上的db.getCollectionInfos()和explain
操作将包括定义视图的管道。因此,请避免在视图定义中直接引用敏感字段和值。
Write Concern
可选的。表示drop命令的write concern的文档。
省略使用默认的写关注。
Access Control
如果部署强制执行身份验证/授权,则必须具有以下特权才能运行collMod命令:
Required Privileges | |
---|---|
修改非上限集合 | 数据库中的collMod |
修改视图 | collMod在数据库中,并且可以: |
视图上没有find要修改, 或
find在要修改的视图上和find在源集合/视图上。
内置角色dbAdmin提供所需的特权。
Examples
更改索引的过期值
要将在lastAccess
字段上构建索引的名为sessions
的集合的过期值从 30 分钟更新为 60 分钟,请使用以下操作:
db.runCommand( { collMod: "sessions",
index: { keyPattern: { lastAccess: 1 },
expireAfterSeconds: 3600
}
})
哪个将返回文档:
{ "expireAfterSeconds_old" : 1800, "expireAfterSeconds_new" : 3600, "ok" : 1 }
将文档验证添加到现有集合中
以下示例将验证器添加到名为contacts
的现有集合中。
Note
MongoDB 3.6 添加了$jsonSchema运算符以支持 JSON 模式验证。
db.runCommand( { collMod: "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"
}
}
} },
validationLevel: "moderate",
validationAction: "warn"
} )
使用moderate
validationLevel,MongoDB 将验证规则应用于插入操作,并将操作更新为已满足验证条件的现有文档。不检查不符合验证标准的现有文档的更新的有效性。
使用warn
validationAction,MongoDB 会记录所有违规,但允许进行插入或更新。
例如,以下插入操作违反了验证规则。
db.contacts.insert( { name: "Amanda", status: "Updated" } )
但是,由于validationAction
仅是warn
,因此 MongoDB 仅记录验证冲突消息,并允许操作 continue 进行:
2017-12-01T12:31:23.738-0500 W STORAGE [conn1] Document would fail validation collection: example.contacts doc: { _id: ObjectId('5a2191ebacbbfc2bdc4dcffc'), name: "Amanda", status: "Updated" }
有关更多信息,请参见Schema Validation。