この投稿は、弊社が提供するWESEEK TECH通信の一環です。
WESEEK TECH通信とは、WESEEKのエンジニアがキャッチアップした技術に関する情報を、techブログを通じて定期的に発信していくものです
はじめに
こんにちは、システムエンジニアの かおりです。今回はNode.jsのDB操作に欠かせないmongooseについて取り扱っていきます。DBに値を保存するにあたって必要な手順やスキーマについて解説します。
mongooseとは
MongoDBを操作するための npmモジュール のことです
MongoDBにUserオブジェクトを保存する
スキーマを定義する
スキーマとは、どのようなデータを格納するのかの定義のことです。
まず、任意のプロパティ(以下のUserスキーマの例ではname
とage
)を指定してスキーマを定義します。
// 1. Userスキーマを定義
const userSchema = new mongoose.Schema({ name: String, age: Number });
次にmodel関数を使ってUserモデルを定義します。
model関数の第一引数には、モデルの対象となるコレクションの単数形の名前を入れます。mongooseはモデル名の小文字バージョンを自動的に検索するので、Userモデルはデータベース内のusers
コレクションに該当します。
また、第二引数にはスキーマを指定します。
// 2. スキーマからUserモデルを生成する
const User = mongoose.model('User', userSchema);
// 3. モデルからインスタンスを作成し、データを代入する
const user1 = new User({ name:"Hanako", age: 20});
save関数でデータの保存をします。
// 4. データを保存する
await user1.save();
スキーマタイプ
スキーマ定義に使用できる型には以下があります。
- String: 文字列
- Number: 数値
- Date: 日付
- Buffer: Node.jsが提供するバイナリデータ型
- Boolean: 真偽
- Mixed: なんでもOK
- ObjectId: mongooseが提供する固有のID (宣言しなくても自動で保持される)
- Array: 配列
- Decimal128: 浮動小数点
- Map: マップ
- Schema: 上記で述べたスキーマ
スキーマ定義のサンプル(公式mongoose Version6.0.2から抜粋)
const schema = new Schema({
name: String,
binary: Buffer,
living: Boolean,
updated: { type: Date, default: Date.now },
age: { type: Number, min: 18, max: 65 },
mixed: Schema.Types.Mixed,
_someId: Schema.Types.ObjectId,
decimal: Schema.Types.Decimal128,
array: [],
ofString: [String],
ofNumber: [Number],
ofDates: [Date],
ofBuffer: [Buffer],
ofBoolean: [Boolean],
ofMixed: [Schema.Types.Mixed],
ofObjectId: [Schema.Types.ObjectId],
ofArrays: [[]],
ofArrayOfNumbers: [[Number]],
nested: {
stuff: { type: String, lowercase: true, trim: true }
},
map: Map,
mapOfString: {
type: Map,
of: String
}
})
最後に
今回はモデルの保存方法を簡単に紹介しました。DB設計はソフトウェア開発工程において重要な部分なので、少しずつ理解を深めて応用していけるようになりましょう。