MongoDB 速習チュートリアル

MongoDB スキーマバリデーション (Schema Validation)

1. スキーマバリデーションの概要

デフォルトの状態では、MongoDB は「フレキシブルスキーマ(柔軟なスキーマ)」を採用しています。これは、初期状態では厳格なスキーマバリデーションが設定されていないことを意味します。

しかし、コレクション内のすべてのドキュメントが共通の構造を持つように強制し、データの整合性を維持するために、スキーマバリデーションルールを作成することができます。

1.1 JSON Schema によるバリデーション

MongoDB は JSON Schema バリデーションをサポートしています。$jsonSchema 演算子を使用することで、ドキュメントの構造、フィールドの型、必須項目などを詳細に定義できます。

1.2 バリデーションルールの実装例

以下の例では、posts コレクションを新規作成する際に、バリデーションルールを適用しています。

// "posts" コレクションをバリデーションルール付きで作成
db.createCollection("posts", {
  validator: {
    $jsonSchema: {
      bsonType: "object",
      // 必須フィールドの指定
      required: [ "title", "body" ],
      properties: {
        title: {
          bsonType: "string",
          description: "投稿のタイトル - 必須項目(文字列型)"
        },
        body: {
          bsonType: "string",
          description: "投稿の本文 - 必須項目(文字列型)"
        },
        category: {
          bsonType: "string",
          description: "投稿のカテゴリ - 任意項目(文字列型)"
        },
        likes: {
          bsonType: "int",
          description: "投稿のいいね数。整数である必要があります - 任意項目(整数型)"
        },
        tags: {
          bsonType: ["string"],
          description: "文字列の配列である必要があります - 任意項目(配列型)"
        },
        date: {
          bsonType: "date",
          description: "日付である必要があります - 任意項目(日付型)"
        }
      }
    }
  }
})

このコマンドを実行すると、現在のデータベースに posts コレクションが作成されます。同時に、指定された JSON Schema の要件がこのコレクションのバリデーションルールとして適用されます。