$jsonSchema (JSON スキーマ検証)
最終更新:2026-10-09
$jsonSchema (JSON スキーマ検証)
$jsonSchema は、JSON Schema ドラフト標準に基づいてドキュメント構造を検証します。クエリ条件としても、コレクションのバリデータとしても使えます。`{ $jsonSchema: { required: ['name'], properties: { age: { bsonType: 'int' } } } }` のように指定します。必須フィールド、型制約、プロパティパターンをサポートしますが、通常のインデックスは使えず、大規模コレクションではコストが高いため、データ品質チェックに適しています。
| カテゴリ | 要素と評価 |
|---|---|
| MongoDB バージョン | 3.6+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ $jsonSchema: { required: [ <field name> ], properties: { <property>: { <constraint> } } } }
⚙️ パラメータ
| スキーマオブジェクト | required、properties、bsonType などのキーを持つ JSON Schema ドキュメント。 |
|---|
戻り値:一致するドキュメントのカーソル
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $jsonSchema: name が必須、age は int
db.users.find({
$jsonSchema: {
required: ['name'],
properties: {
age: { bsonType: 'int' }
}
}
})
出力:
// name が存在し age が int 型のドキュメントを返す(age 未宣言でも合格)
📌 注意事項
- BSON 型の固定には bsonType を使う(int、string、objectId など)
- 通常のインデックスは使えない。大規模コレクションでの多用は避ける
- 同じ構文がコレクションバリデータ(db.createCollection の validator オプション)にも使える
🏷️ 関連タグ
💡 関連ケース
📚 関連チュートリアル
❓ よくある質問
Q$jsonSchema はネストしたオブジェクトを検証できますか?
Aはい。properties の中に properties をネストして、レベルごとに検証できます。
Q$jsonSchema と $type の違いは?
A$type は 1 つのフィールドの型を判定します。$jsonSchema は required、ネスト、複数フィールドを使ったドキュメント全体の構造を検証します。
Qコレクション作成時に $jsonSchema を使えますか?
Aはい。db.createCollection に validator: { $jsonSchema: {...} } を渡すと、書き込み時バリデータとして機能します。