駆け出しのエンジニア日記

プログラミング言語勉強中の奮闘日記

Mongoose:スキーマのバリデーション

Mongooseのスキーマのバリデーションについてまとめていきます。

使用頻度の高いものをピックアップしてみました。

 

これまでスキーマのバリデーションは下記のような記述でした。

この形は省略系となっており、これ以外にも細かく定義ができます。

const movieSchema = new mongoose.Schema({
title: String,
year: Number,
score: Number,
rating: String
});

省略しなかった場合はオブジェクトで記述することになります。

今回はそれを確認していきましょう。

 

・サンプル

const productSchema = new mongoose.Schema({
///オブジェクトで記述できる
name: {
type: String,
},
price: {
type: Number,
}
})

省略しなかった場合はこのように記述ができ、さらに情報を追加することが可能となり

ます。

例えば

name: {
type: String,
required: true,
maxLength: 10,
unique: true
},

required」・・・

必須制約をかけるバリデータであり、指定された「key」は必ずオブジェクトに存在し

なければなりません。デフォルトはfalseです。

unique」・・・

全ドキュメントの中でユニーク(重複なし)かどうかのフラグです。

ドキュメント作成時、もしくは更新時に重複してる場合はエラーとなります。

使う際はrequiredオプションと組み合わせがほぼ必須です。

これもデフォルトはfalseです。

maxlength, minlength」・・・

最大,最小文字数を指定し、上記の場合なら10文字を超えるとエラーになります。

price: {
type: Number,
required: true,
//エラーメッセージをカスタムできる(配列で渡す)
min: [0, 'priceは0より大きい値にしてください']
},

max, min」・・・

第一引数は最大,最小値を指定し、第二引数にエラーメッセージも入れることができま

す。その場合は配列で渡します。(Number型のみ可)

他にも様々な型が存在します。

onSale: {
 type: Boolean,
 default: false
},
//categoriesはStringの配列と宣言もできる
categories: [String],
 //オブジェクトのネスト
qty: {
      online: {
    type: Number,
    default: 0
          },
     inStore: {
    type: Number,
    default: 0
         }
  },
size: {
type: String,
//enumで指定した配列内にある値のみtrueになる、それ以外はエラー
enum: ['S', 'M', 'L']
}

default」・・・

デフォルトの値です。デフォルトでは設定されていません。

enum」・・・

フィールドに指定できる値の列挙(String型でよく使います)で、指定の値以外の値を

入れた場合はエラーになります。

上記の場合だと、「S,M,L」のみ受付、それ以外はエラーになる挙動です。

デフォルトでは設定されていません。

mongoosejs.com

これも参考にしてみてください。