collMod
Definition
collMod
collMod
makes it possible to add options to a collectionor to modify view definitions.
Note
The view modified by this command does not refer to materializedviews. For discussion of on-demand materialized views, see$merge
instead.
The commandtakes the following prototype form:
Starting in MongoDB 4.2
- MongoDB removes the MMAPv1 storage engine and the MMAPv1specific options
noPadding
andusePowerOf2Sizes
forcollMod
. - The view definition
pipeline
cannotinclude the$out
or the$merge
stage. If the view definition includesnested pipeline (e.g. the view definition includes$lookup
or$facet
stage), thisrestriction applies to the nested pipelinesas well.
- db.runCommand( { collMod: <collection or view>, <option1>: <value1>, <option2>: <value2> ... } )
For the <collection or view>
, specify the name of a collectionor view in the current database.
Use the userFlags
field in thedb.collection.stats()
output to check the options enabledfor a collection.
Options
TTL Collections
index
- The
index
option changes the expiration time of aTTL Collection.
Specify the key or index name, and new expiration time with a document of the form:
- {keyPattern: <index_spec> || name: <index_name>, expireAfterSeconds: <seconds> }
In this example, <index_spec>
is an existing index in thecollection. In cases of multiple indexes with the same key pattern,the user is required to specify the index by name. seconds
is the numberof seconds to subtract from the current time.
On success collMod
returns a document with fieldsexpireAfterSeconds_old
and expireAfterSeconds_new
set totheir respective values.
On failure, collMod
returns a document with noexpireAfterSeconds field to update
if there is no existingexpireAfterSeconds
field or cannot find index { key:1.0 } for ns namespace
if the specified keyPattern
does not exist.
Document Validation
New in version 3.2.
validator
allows users to specify validation rulesor expressions for a collection.For more information, see Schema Validation.
The validator
option takes a document that specifies thevalidation rules or expressions. You can specify the expressionsusing the same operators as the query operators with the exception of : $geoNear
,$near
, $nearSphere
, $text
, and$where
.
Note
- Validation occurs during updates and inserts. Existingdocuments do not undergo validation checks until modification.
- You cannot specify a validator for collections in the
admin
,local
, andconfig
databases. - You cannot specify a validator for
system.*
collections.
New in version 3.2.
The validationLevel
determines how strictly MongoDB applies thevalidation rules to existing documents during an update.
validationLevel
Description"off"
No validation for inserts or updates."strict"
Default Apply validation rules to all inserts and allupdates."moderate"
Apply validation rules to inserts and to updates on existing _valid_documents. Do not apply rules to updates on existing _invalid_documents.
New in version 3.2.
The validationAction
option determines whether to error
oninvalid documents or just warn
about the violations but allowinvalid documents.
Important
Validation of documents only applies to those documents asdetermined by the validationLevel
.
validationAction
Description"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 failsvalidation, the write operation logs the validation failure.
To view the validation specifications for a collection, use thedb.getCollectionInfos()
method.
Views
Note
The view modified by this command does not refer to materializedviews. For discussion of on-demand materialized views, see$merge
instead.
viewOn
- The underlying source collection or view for the view. The view definition is determined by applying thespecified
pipeline
to this source.
Required if modifying a view on a MongoDB deployment that is runningwith access control.
pipeline
- The aggregation pipeline that definesthe view.
Note
The view definition pipeline
cannotinclude the $out
or the $merge
stage. If the view definition includesnested pipeline (e.g. the view definition includes$lookup
or $facet
stage), thisrestriction applies to the nested pipelinesas well.
Required if modifying a view on a MongoDB deployment that is runningwith access control.
The view definition is public; i.e. db.getCollectionInfos()
and explain
operations on the view will include the pipeline thatdefines the view. As such, avoid referring directly to sensitive fieldsand values in view definitions.
- db.runCommand( {
- collMod: "myView", viewOn: "activities", pipeline: [ { $match: { status: "Q" } }, { $project: { user: 1, date: 1, description: 1} } ]
- } )
Write Concern
Optional. A document expressing the write concern of the drop
command.
Omit to use the default write concern.
Access Control
If the deployment enforces authentication/authorization, you must havethe following privilege to run the collMod
command:
Required Privileges | |
---|---|
Modify a non-capped collection | collMod in the database |
Modify a view | collMod in the database and either:- no find on the view to modify, or- both find on the view to modify andfind on the source collection/view. |
The built-in role dbAdmin
provides the required privileges.
Behavior
Resource Locking
The collMod
command obtains an exclusive lock on theparent database of the specified collection for the duration of theoperation. All subsequent operations on the database and all itscollections must wait until collMod
releases the lock.
Examples
Change Expiration Value for Indexes
To update the expiration value for a collectionnamed sessions
indexed on a lastAccess
field from 30minutes to 60 minutes, use the following operation:
- db.runCommand( { collMod: "sessions",
- index: { keyPattern: { lastAccess: 1 },
- expireAfterSeconds: 3600
- }
- })
Which will return the document:
- { "expireAfterSeconds_old" : 1800, "expireAfterSeconds_new" : 3600, "ok" : 1 }
Add Document Validation to an Existing Collection
The following example adds a validator to an existing collection namedcontacts
.
Note
MongoDB 3.6 adds the $jsonSchema
operator to support JSONSchema validation.
- 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"
- } )
With the moderate
validationLevel
, MongoDB appliesvalidation rules to insert operations and to update operationss toexisting documents that already fulfill the validation criteria.Updates to existing documents that do not fulfill the validationcriteria are not checked for validity.
With the warn
validationAction
, MongoDB logs anyviolations but allows the insertion or update to proceed.
For example, the following insert operation violates the validation rule.
- db.contacts.insert( { name: "Amanda", status: "Updated" } )
However, since the validationAction
is warn
only, MongoDB onlylogs the validation violation message and allows the operation toproceed:
- 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" }
For more information, see Schema Validation.