Mongooseでモデルを定義しデータベースへ値を保存する

この投稿は、弊社が提供するWESEEK TECH通信の一環です。
WESEEK TECH通信とは、WESEEKのエンジニアがキャッチアップした技術に関する情報を、techブログを通じて定期的に発信していくものです

はじめに

こんにちは、システムエンジニアのかおりです。今回はNode.jsのDB操作に欠かせないmongooseについて取り扱っていきます。DBに値を保存するにあたって必要な手順やスキーマについて解説します。

mongooseとは

MongoDBを操作するための npmモジュール のことです

MongoDBにUserオブジェクトを保存する

スキーマを定義する

スキーマとは、どのようなデータを格納するのかの定義のことです。
まず、任意のプロパティ(以下のUserスキーマの例ではnameage)を指定してスキーマを定義します。

// 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設計はソフトウェア開発工程において重要な部分なので、少しずつ理解を深めて応用していけるようになりましょう。

参考にさせていただいた記事

関連記事

JavaScript/Node.jsでMongoDB+Mongooseのデータマイグレーション