##mongooseとは
MongoDBを操作するためのnpmモジュール。
MongoDBのフィールドに様々な入力設定を行うことができる。
フィールドに挿入するデータ型を設定することができる。
##※MongoDBとMySQLの呼称の違い
MySQL
データは「テーブル」の形で保存される。MongoDB(NoSQL)
データは「コレクション」の形で保存される・アプリ作成時のファイル構成例
└── src
├── db
│ └── mongoose.js //mongooseのnpmモジュールを読み込み
├── index.js //アプリのメイン処理を記述
├── models
│ ├── task.js //taskデータベースのためのフィールド設定
│ └── user.js //userデータベースのためのフィールド設定
└── routers
├── task.js //express・taskデータベース操作のためのルーティング処理
└── user.js //express・userデータベース操作のためのルーティング処理
##mongooseの読み込み
・「npmパッケージ『mongoose』、公式ドキュメント」を参照
https://www.npmjs.com/package/mongoose
プロジェクトファイルに、「npm i mongoose」でmongooseをインストール
・mongooseを読み込む
「mongooseの公式ドキュメント」( https://mongoosejs.com/ )を参照し、読み込みのためのコードを記述。
<mongoose.js>
const mongoose = require('mongoose')
//mongodbのポートの読み込みと、mongoDBのコレクション名(task-manager-api)をつける
mongoose.connect('mongodb://localhost:27017/task-manager-api', {
useNewUrlParser: true,
useUnifiedTopology: true,
useFindAndModify: false
});
<参考>「mongooseの公式ドキュメント」( https://mongoosejs.com/ )のコード
//mongooseモジュールの読み込み
const mongoose = require('mongoose');
//mongodbのポートの読み込みと、mongoDBのコレクション名(test)をつける
mongoose.connect('mongodb://localhost:27017/test', {useNewUrlParser: true, useUnifiedTopology: true});
//const Cat:Catというドキュメントを作成
//'Cat':データモデルの名前
//nameフィールドのデータ型をStringに設定。
const Cat = mongoose.model('Cat', { name: String });
//"Cat"データモデルの新しいインスタンスを作成。
//kittyというドキュメントで、nameは'Zildjian'
const kitty = new Cat({ name: 'Zildjian' });
//kittyドキュメントをデータベースに保存する。保存できたら"meow"と表示させる
kitty.save().then(() => console.log('meow'));
##mongooseで挿入するデータ型を設定する
・入力するデータ型を設定
<公式ドキュメント> "Schemas"を参照( https://mongoosejs.com/docs/guide.html#statics )<例>
const Cat = mongoose.model('Cat', {
name: {
type: String //データ型は文字列
},
age: {
type: Number //データ型は数字
},
isMine: {
type: Boolean //データ型はtrueかfalseのどちらか
}
});
・入力するデータ形式を自作・最小値/最大値の設定・入力必須設定・エラー設定
<公式ドキュメント> "Validation"を参照( https://mongoosejs.com/docs/validation.html#built-in-validators )・小文字として認識・空白スペースの削除(データサニタイズ)
const User = mongoose.model('User', {
password:{
type: String,
required: true, //入力必須設定
trim: true, //空白を無くして認識
minlength: 7, //最小入力文字数設定
//validate(value:入力した値)で、入力するデータ形式を自作
validate(value){
//toLowerCaseで、小文字も大文字も小文字と認識する設定
if(value.toLowerCase().includes('password')){
//エラーを起こして処理を分岐させる
throw new Error ('Do not use "password" to password')
}
}
}
・デフォルトの入力を設定
const Task = mongoose.model('Task', {
complete:{
type: Boolean,
default: false, //デフォルトの入力値を設定
}
})
・データベースに入力す値を一意に設定
email: {
type: String,
unique: true, //データベース上のemailの値を一意にする›
required: true,
trim: true,
lowercase: true,
validate(value){
if(!validator.isEmail(value)){
throw new Error ('Email is invalid') //npmパッケージ、「validator」を利用し、メールアドレスとして正しい値か確認
}
}
},