collMod

在本页面

Definition

db.runCommand( { collMod: <collection or view>, <option1>: <value1>, <option2>: <value2> ... } )

对于<collection or view>,指定当前数据库中的集合或视图的名称。

使用db.collection.stats()输出中的userFlags字段检查为集合启用的选项。

Options

TTL Collections

用以下格式的文档指定键或索引名称,以及新的到期时间:

{keyPattern: <index_spec> || name: <index_name>, expireAfterSeconds: <seconds> }

在此示例中,<index_spec>是集合中的现有索引。如果多个索引具有相同的键模式,则要求用户按名称指定索引。 seconds是从当前时间减去的秒数。

成功collMod返回一个文档,其中字段expireAfterSeconds_oldexpireAfterSeconds_new设置为各自的值。

失败时,如果不存在expireAfterSeconds字段,则collMod返回带有no expireAfterSeconds field to update的文档;如果指定的keyPattern不存在,则返回cannot find index { **key**: 1.0 } for ns **namespace**

Record Allocation

noPadding仅适用于 MMAPv1 存储引擎。

noPadding禁用集合的记录填充。没有填充,记录分配大小对应于文档大小,并且导致文档增长的任何更新都将需要新的分配。

Warning

仅将工作负载具有* no *导致文档增长的更新操作的集合(例如具有仅插入的工作负载的集合)设置noPaddingtrue。有关更多信息,请参见无填充分配策略

usePowerOf2Sizes仅适用于 MMAPv1 存储引擎。

usePowerOf2Sizes对分配策略没有影响。 MongoDB 3.0 使用2 分配的力量作为 MMAPv1 的默认记录分配策略。

要为集合禁用2 分配的力量,请将collMod命令与noPadding选项一起使用,或将db.createCollection()方法与noPadding选项一起使用。有关更多信息,请参见MMAPv1 记录分配行为更改

Document Validation

validator允许用户为集合指定验证规则或表达式。有关更多信息,请参见Schema Validation

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

Note

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

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

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

validationLevel确定在更新期间 MongoDB 将验证规则严格应用于现有文档的严格程度。

validationLevel Description
"off" 不验证插入或更新。
"strict" 默认 将验证规则应用于所有插入和所有更新。
"moderate" 将验证规则应用于现有* valid 文档的插入和更新。不要将规则应用于现有无效*文档的更新。

validationAction选项确定是对无效文档error还是对违规仅warn,但允许无效文档。

Important

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

validationAction Description
"error" 默认 文件必须在写入之前通过验证。否则,写入操作将失败。
"warn" 文件不必通过验证。如果文档验证失败,则写操作将记录验证失败。

要查看集合的验证规范,请使用db.getCollectionInfos()方法。

Views

如果在运行带有访问控制的 MongoDB 部署上修改视图,则为必需。

如果在运行带有访问控制的 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

首页