验证级别与操作
您将配置 validationLevel(严格或适度)和 validationAction(报错或警告),控制违规情况的处理方式。
验证级别与操作 是 CoddyKit 上的免费 MongoDB Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 MongoDB Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 MongoDB Academy 课程共包含 4 节课。
本课时的部分内容尚未翻译,以英文显示。
Controlling How Strict Validation Is
MongoDB gives you two independent knobs to tune schema validation behaviour: validationLevel controls which documents are subject to validation, while validationAction controls what happens when a document fails validation. Together they let you introduce validation gradually into existing collections without breaking current data or applications.
validationLevel: strict
strict is the default validation level. In strict mode, every insert and every update must pass the validator—no exceptions. If an existing document in the collection already violates the schema, attempting to update it will still be checked against the validator. Strict mode gives you the strongest data quality guarantee but can be disruptive when applied to a collection with legacy non-conforming documents.
db.runCommand({
collMod: 'users',
validator: { $jsonSchema: { /* ... */ } },
validationLevel: 'strict' // default — all inserts and updates must pass
});validationLevel: moderate
moderate level applies the validator only to new inserts and to updates of documents that already pass the validator. Existing non-conforming documents can still be updated without being forced to comply. This is a safe migration path: you enable the validator on a live collection without breaking updates to old documents that don't yet match the new schema.
db.runCommand({
collMod: 'users',
validator: { $jsonSchema: { /* ... */ } },
validationLevel: 'moderate' // existing non-conforming docs can still be updated
});validationLevel: off
Setting validationLevel to off disables validation entirely, even if a validator is attached to the collection. This is useful during bulk data migrations or emergency hotfixes where you need to write non-conforming data temporarily. Always re-enable validation after the migration window closes.
// Temporarily disable validation for a migration window
db.runCommand({
collMod: 'users',
validationLevel: 'off'
});
// ... run migration ...
// Re-enable strict validation
db.runCommand({
collMod: 'users',
validationLevel: 'strict'
});validationAction: error
error is the default validation action. When a document fails validation, MongoDB rejects the write entirely and returns an error to the client. The document is not written. This is the safest setting for production because it prevents malformed data from ever entering the collection.
db.runCommand({
collMod: 'orders',
validator: { $jsonSchema: { /* ... */ } },
validationAction: 'error' // default: reject the write, return an error
});validationAction: warn
warn action allows the document to be written even if it fails validation, but logs a warning message to the MongoDB server log. This is useful during a transition period when you want to observe how many violations occur without blocking existing application traffic. After examining the logs and fixing the offenders, you can switch to error action.
db.runCommand({
collMod: 'legacy_collection',
validator: { $jsonSchema: { /* ... */ } },
validationAction: 'warn' // write succeeds, violation logged to server log
});
// The server log will show:
// [conn1] Document failed validation: { ... } with schema: { ... }Combining Level and Action
The two settings compose independently. A common migration strategy is to start with validationLevel: 'moderate' and validationAction: 'warn'—new documents must comply but get logged on failure, while old documents are untouched. After observing the warnings and backfilling old data, switch to strict + error for full enforcement.
// Phase 1: observe without blocking
db.runCommand({
collMod: 'users',
validator: { $jsonSchema: { bsonType: 'object', required: ['email'] } },
validationLevel: 'moderate',
validationAction: 'warn'
});
// Phase 2 (after backfill): full enforcement
db.runCommand({
collMod: 'users',
validationLevel: 'strict',
validationAction: 'error'
});Reading the Validation Configuration
Check the current validation settings on a collection using db.getCollectionInfos(). The response includes options.validationLevel and options.validationAction alongside the full validator document. This is useful to audit all collections in a database and verify that production collections have strict enforcement enabled.
const info = db.getCollectionInfos({ name: 'users' });
const opts = info[0].options;
console.log('level:', opts.validationLevel);
console.log('action:', opts.validationAction);
console.log('validator:', JSON.stringify(opts.validator, null, 2));Bypassing Validation With bypassDocumentValidation
Certain database operations support a bypassDocumentValidation: true option that skips the validator for that specific write. Only users with the bypassDocumentValidation privilege can use this option. It is intended for trusted admin scripts and data migrations only—never use it in application code as it defeats the purpose of having a validator.
// Insert a document bypassing validation — admin/migration use only
db.users.insertOne(
{ name: 'LegacyUser' }, // missing required email
{ bypassDocumentValidation: true }
);Validation Warnings in the Server Log
When validationAction is warn, each failed validation is written to the MongoDB server log with the WRITE component and WARNING severity. The log line includes the database, collection, the violating document's _id, and the specific schema rule that was broken. You can monitor these logs with Atlas's log viewer or by tailing mongod.log on self-hosted deployments.
Practical Migration Playbook
Here is the recommended four-phase playbook for adding validation to an existing production collection:
- Phase 1: Set
moderate+warn— no impact, observe violations - Phase 2: Fix application code to send compliant documents
- Phase 3: Backfill old non-conforming documents with a migration script
- Phase 4: Switch to
strict+error— full enforcement
Quick Check
Test your understanding of MongoDB & NoSQL Databases concepts from this lesson.
Lesson Recap
In this lesson you learned: validationLevel (strict/moderate/off) controls which documents are validated, validationAction (error/warn) controls whether failures block or just log, and combining moderate + warn is the safest way to introduce validation on a live collection. Next up we learn how to evolve schemas without downtime on a running MongoDB cluster.
常见问题解答
「验证级别与操作」课时是免费的吗?
是的 — 「验证级别与操作」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 MongoDB Academy 课程的其余内容,请升级到 CoddyKit PRO。 MongoDB Academy 课程共包含 4 节课。
「验证级别与操作」这节课中我会学到什么?
您将配置 validationLevel(严格或适度)和 validationAction(报错或警告),控制违规情况的处理方式。 你通过在浏览器中直接运行的动手代码来练习 MongoDB Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 MongoDB Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 MongoDB Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「验证级别与操作」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 MongoDB Academy 课中编写并运行代码吗?
能。每节 MongoDB Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 为集合添加验证器
- 类型、必填与枚举约束
- 验证级别与操作
- 无停机演进模式