0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MongoDBの基本

Last updated at Posted at 2024-12-21

Mongooseを用いたMongoDB操作

1. 初期設定

まず、プロジェクトをセットアップし、必要なパッケージをインストールします。

npm init -y
npm install mongoose

2. MongoDBへの接続

Mongooseを用いてMongoDBに接続します。接続エラーが発生した場合の処理も含めています。

database.js

const mongoose = require('mongoose');

const connectDB = async () => {
  try {
    await mongoose.connect('mongodb://localhost:27017/myDatabase', {
      useNewUrlParser: true,
      useUnifiedTopology: true
    });
    console.log('MongoDBに接続しました');
  } catch (error) {
    console.error('MongoDB接続エラー:', error);
    process.exit(1); // 接続失敗時にプロセスを終了
  }
};

module.exports = connectDB;

3. スキーマとモデルの定義

Mongooseスキーマを使って、データ構造とバリデーションを定義します。

userModel.js

const mongoose = require('mongoose');

const userSchema = new mongoose.Schema({
  name: {
    type: String,
    required: [true, '名前は必須です'],
    trim: true,
    minlength: [2, '名前は2文字以上でなければなりません']
  },
  age: {
    type: Number,
    min: [0, '年齢は0以上でなければなりません'],
    max: [120, '年齢は120以下でなければなりません'],
    required: [true, '年齢は必須です']
  },
  email: {
    type: String,
    unique: true,
    required: [true, 'メールアドレスは必須です'],
    match: [/^\S+@\S+\.\S+$/, '有効なメールアドレスを入力してください']
  },
  createdAt: {
    type: Date,
    default: Date.now
  }
});

const User = mongoose.model('User', userSchema);
module.exports = User;

スキーマフィールドの詳細

  1. name フィールド

    • 型: String
    • 必須: 名前が空の場合エラーをスローします。
    • trim: 前後の空白を削除します。
    • 最小文字数: 2文字以上である必要があります。
  2. age フィールド

    • 型: Number
    • 最小値: 0(マイナスの値を防止)
    • 最大値: 120(非現実的な年齢を防止)
    • 必須: 値が存在しない場合にエラーをスローします。
  3. email フィールド

    • 型: String
    • 一意性: データベース内で重複を防ぎます。
    • 必須: メールアドレスが未入力の場合エラーをスローします。
    • フォーマット: 正規表現でメールアドレスの形式を検証します。
  4. createdAt フィールド

    • 型: Date
    • デフォルト値: ドキュメント作成時に現在日時を自動設定します。

4. データ操作

データの挿入、検索、更新、削除の方法を個別に説明します。

データの挿入

const User = require('./userModel');

const createUser = async () => {
  try {
    const newUser = new User({ name: 'Taro', age: 30, email: 'taro@example.com' });
    await newUser.save();
    console.log('ユーザーが作成されました:', newUser);
  } catch (error) {
    console.error('ユーザー作成エラー:', error);
  }
};

createUser();

データの検索

const findUsers = async () => {
  try {
    const users = await User.find({ age: { $gte: 20 } });
    console.log('検索結果:', users);
  } catch (error) {
    console.error('データ検索エラー:', error);
  }
};

findUsers();

データの更新

const updateUser = async () => {
  try {
    const updatedUser = await User.updateOne({ name: 'Taro' }, { $set: { age: 31 } });
    console.log('更新結果:', updatedUser);
  } catch (error) {
    console.error('データ更新エラー:', error);
  }
};

updateUser();

データの削除

const deleteUser = async () => {
  try {
    const deletedUser = await User.deleteOne({ name: 'Taro' });
    console.log('削除結果:', deletedUser);
  } catch (error) {
    console.error('データ削除エラー:', error);
  }
};

deleteUser();
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?