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;
スキーマフィールドの詳細
-
name
フィールド- 型:
String
- 必須: 名前が空の場合エラーをスローします。
-
trim
: 前後の空白を削除します。 - 最小文字数: 2文字以上である必要があります。
- 型:
-
age
フィールド- 型:
Number
- 最小値: 0(マイナスの値を防止)
- 最大値: 120(非現実的な年齢を防止)
- 必須: 値が存在しない場合にエラーをスローします。
- 型:
-
email
フィールド- 型:
String
- 一意性: データベース内で重複を防ぎます。
- 必須: メールアドレスが未入力の場合エラーをスローします。
- フォーマット: 正規表現でメールアドレスの形式を検証します。
- 型:
-
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();