Mongoose

MongooseはNode.js環境でMongoDBを使用する際のデファクトスタンダードとなっているODM(Object Document Mapper)です。強力なスキーマ定義、バリデーション、ミドルウェア機能を提供し、MongoDBの柔軟性を保ちながら構造化されたデータ管理を可能にします。

ORMJavaScriptMongoDBNoSQLドキュメント指向スキーマ

GitHub概要

Automattic/mongoose

MongoDB object modeling designed to work in an asynchronous environment.

スター27,287
ウォッチ481
フォーク3,859
作成日:2010年4月6日
言語:JavaScript
ライセンス:MIT License

トピックス

mongomongodbnodejsodmorm

スター履歴

Automattic/mongoose Star History
データ取得日時: 2025/7/19 08:07

ライブラリ

Mongoose

MongoDB専用のエレガントなオブジェクトモデリングライブラリ。スキーマベースのソリューションでMongoDBドキュメントをモデル化。Node.jsとMongoDBの標準的組み合わせ。

概要

MongooseはNode.js環境でMongoDBを使用する際のデファクトスタンダードとなっているODM(Object Document Mapper)です。強力なスキーマ定義、バリデーション、ミドルウェア機能を提供し、MongoDBの柔軟性を保ちながら構造化されたデータ管理を可能にします。

主な特徴

  • スキーマベース: 明確なスキーマ定義でドキュメント構造を管理
  • バリデーション: 組み込みおよびカスタムバリデーション
  • ミドルウェア: pre/postフックで処理を挿入
  • 仮想プロパティ: 計算プロパティやゲッター/セッター
  • プラグインシステム: 再利用可能な機能の実装

使用例

基本的な使い方

const mongoose = require('mongoose');

// スキーマ定義
const userSchema = new mongoose.Schema({
  name: {
    type: String,
    required: true
  },
  email: {
    type: String,
    required: true,
    unique: true,
    lowercase: true
  },
  age: {
    type: Number,
    min: 0
  },
  createdAt: {
    type: Date,
    default: Date.now
  }
});

// モデル作成
const User = mongoose.model('User', userSchema);

// データの作成
const newUser = await User.create({
  name: 'John Doe',
  email: '[email protected]',
  age: 25
});

// データの検索
const users = await User.find({ age: { $gte: 18 } });

ミドルウェアの使用

// 保存前の処理
userSchema.pre('save', async function(next) {
  if (this.isModified('password')) {
    this.password = await bcrypt.hash(this.password, 10);
  }
  next();
});

// 仮想プロパティ
userSchema.virtual('fullName').get(function() {
  return `${this.firstName} ${this.lastName}`;
});

最新トレンド(2025年)

MongoDB開発では定番の選択肢として安定した人気を維持。NoSQLアプリケーション開発で広く採用され、MongoDBエコシステムでは不動の地位を確立しています。TypeScript対応も強化され、型安全性が向上しています。

メリット・デメリット

メリット

  • MongoDB開発の標準ツール
  • 豊富なドキュメントとコミュニティ
  • 強力なスキーマとバリデーション機能
  • プラグインエコシステムが充実

デメリット

  • MongoDB専用でRDBには対応しない
  • スキーマによりMongoDBの柔軟性が一部制限される
  • 大規模データセットでのパフォーマンス課題

採用事例

  • Node.js + MongoDBプロジェクトの大多数
  • RESTful APIサーバー
  • リアルタイムアプリケーション
  • コンテンツ管理システム