Node.jsアプリケーションでMongoDBを使用してデータを保存する方法について、完全かつ包括的なガイドを提供します。この記事では、Node.jsとMongoDBを使った基本的なデータの操作方法を解説します。
1. Node.jsとMongoDBのセットアップ
Node.jsを使用してMongoDBに接続するために、まずは必要なモジュールをインストールします。MongoDBの公式Node.jsドライバを使うことで、データベースとの通信が可能になります。

必要なパッケージのインストール
まず、Node.jsのプロジェクトを作成し、MongoDB用のモジュールをインストールします。
bashnpm init -y npm install mongodb
これにより、MongoDBのNode.jsドライバがプロジェクトにインストールされます。
2. MongoDBに接続する
MongoDBに接続するためには、MongoDBのインスタンスが必要です。ローカルまたはクラウド(例えばMongoDB Atlas)を利用することができます。以下は、ローカルのMongoDBに接続するサンプルコードです。
javascriptconst { MongoClient } = require('mongodb');
// MongoDBのURL(ローカルホストの場合)
const url = 'mongodb://localhost:27017';
const dbName = 'mydatabase'; // 使用するデータベース名
async function main() {
const client = new MongoClient(url, { useUnifiedTopology: true });
try {
// MongoDBに接続
await client.connect();
console.log("Connected to MongoDB!");
// データベースを選択
const db = client.db(dbName);
// ここでデータベース操作を行う
} catch (err) {
console.error(err);
} finally {
// 接続を閉じる
await client.close();
}
}
main();
このコードでは、mongodb://localhost:27017
に接続し、mydatabase
というデータベースを選択しています。
3. データの保存
MongoDBにデータを保存するためには、まずコレクション(テーブルに相当)を選択し、その中にドキュメント(行に相当)を挿入します。以下に、データを挿入するコード例を示します。
javascriptasync function insertData() {
const client = new MongoClient(url, { useUnifiedTopology: true });
try {
await client.connect();
const db = client.db(dbName);
const collection = db.collection('users'); // usersコレクションを選択
const newUser = {
name: "山田太郎",
age: 30,
email: "yamada@example.com"
};
// ドキュメントを挿入
const result = await collection.insertOne(newUser);
console.log(`New user created with the following id: ${result.insertedId}`);
} catch (err) {
console.error(err);
} finally {
await client.close();
}
}
insertData();
このコードでは、users
コレクションに新しいユーザー情報を挿入しています。insertOne
メソッドを使用して、単一のドキュメントを追加しています。
4. データの読み取り
データを読み取るためには、find
メソッドを使用します。条件を指定してデータを取得することができます。例えば、特定の年齢のユーザーを取得する方法は以下の通りです。
javascriptasync function findData() {
const client = new MongoClient(url, { useUnifiedTopology: true });
try {
await client.connect();
const db = client.db(dbName);
const collection = db.collection('users');
const query = { age: { $gt: 25 } }; // 年齢が25歳以上のユーザーを検索
const users = await collection.find(query).toArray();
console.log(users);
} catch (err) {
console.error(err);
} finally {
await client.close();
}
}
findData();
このコードでは、age
が25歳以上のユーザーを取得し、その結果を配列として返しています。
5. データの更新
MongoDBで既存のデータを更新するためには、updateOne
またはupdateMany
メソッドを使用します。例えば、特定のユーザーの年齢を更新する方法は以下の通りです。
javascriptasync function updateData() {
const client = new MongoClient(url, { useUnifiedTopology: true });
try {
await client.connect();
const db = client.db(dbName);
const collection = db.collection('users');
const filter = { name: "山田太郎" }; // 更新するユーザーを検索
const updateDoc = {
$set: { age: 31 } // 年齢を31に更新
};
const result = await collection.updateOne(filter, updateDoc);
console.log(`${result.matchedCount} document(s) matched the filter, ${result.modifiedCount} document(s) was/were updated.`);
} catch (err) {
console.error(err);
} finally {
await client.close();
}
}
updateData();
このコードでは、山田太郎
の年齢を31歳に更新しています。updateOne
メソッドを使用して、1件のドキュメントを更新しています。
6. データの削除
MongoDBでデータを削除するには、deleteOne
またはdeleteMany
メソッドを使用します。例えば、特定のユーザーを削除する方法は以下の通りです。
javascriptasync function deleteData() {
const client = new MongoClient(url, { useUnifiedTopology: true });
try {
await client.connect();
const db = client.db(dbName);
const collection = db.collection('users');
const filter = { name: "山田太郎" }; // 削除するユーザーを検索
const result = await collection.deleteOne(filter);
console.log(`${result.deletedCount} document(s) was/were deleted.`);
} catch (err) {
console.error(err);
} finally {
await client.close();
}
}
deleteData();
このコードでは、山田太郎
という名前のユーザーを削除しています。deleteOne
メソッドを使用して1件のドキュメントを削除しています。
7. エラーハンドリングと接続管理
Node.jsでMongoDBに接続する際、エラーハンドリングは非常に重要です。接続エラーや操作エラーを適切に処理し、データベースとの接続を確実に閉じるようにします。上記のコードでは、try-catch
構文を使ってエラーをキャッチし、finally
ブロックで接続を閉じる処理を行っています。
また、MongoDBへの接続設定にはオプションを設定することができます。例えば、useUnifiedTopology: true
オプションを使用することで、新しい接続管理機能を使用することができます。
8. MongoDBのクエリ操作
MongoDBは非常に柔軟なクエリ機能を提供しています。以下は、よく使われるクエリの例です。
$gt
,$lt
,$eq
などを使った比較演算子$and
,$or
,$not
を使った論理演算子$in
,$nin
を使った配列操作$exists
を使ったフィールドの存在チェック
例えば、複数の条件を組み合わせてデータを取得することができます。
javascriptconst query = {
$and: [
{ age: { $gte: 30 } },
{ name: { $regex: /太郎/ } }
]
};
このクエリでは、年齢が30以上で名前に「太郎」が含まれるユーザーを検索しています。
9. MongoDBのインデックス
MongoDBではインデックスを作成することで、検索性能を向上させることができます。インデックスを作成することで、大規模なデータセットに対しても迅速なクエリ実行が可能になります。
javascriptasync function createIndex() {
const client = new MongoClient(url, { useUnifiedTopology: true });
try {
await client.connect();
const db = client.db(dbName);
const collection = db.collection('users');
// 名前フィールドにインデックスを作成
await collection.createIndex({ name: 1 });
console.log("Index created!");
} catch (err) {
console.error(err);
} finally {
await client.close();
}
}
createIndex();
このコードでは、name
フィールドにインデックスを作成しています。
10. 結論
Node.jsとMongoDBを組み合わせることで、データベースと効率的にやり取りを行うことができます。基本的なデータの保存、更新、読み取り、削除を行うだけでなく、クエリやインデックス管理を活用することで、より効率的にデータ操作が可能です。この記事で紹介した方法を参考にして、MongoDBを使ったアプリケーション開発を進めてみてください。