✔️

【MongoDB】CRUD操作チートシート

に公開

はじめに

MongoDBでのデータ操作の基本をまとめました。CRUD操作(Create、Read、Update、Delete)の実装例を中心に、よく使う検索演算子についても解説します。

CRUD操作の全体像

データを挿入する(Create)

MongoDBではドキュメント(JSONライクなデータ構造)をコレクションに格納します。

1つのドキュメントを挿入

db.collectionName.insertOne({ name: "太郎", age: 25 });

複数のドキュメントを挿入

配列を使って一度に複数のドキュメントを挿入できます。

db.collectionName.insertMany([
  { name: "太郎", age: 25 },
  { name: "花子", age: 22 },
  { name: "次郎", age: 30 },
]);

データを検索する(Read)

すべてのドキュメントを取得

db.collectionName.find();

条件に一致するドキュメントを取得

検索条件を指定してデータを絞り込みます。

// 年齢が25歳の人を検索
db.collectionName.find({ age: 25 });

// 年齢が25歳以上の人を検索
db.collectionName.find({ age: { $gte: 25 } });

// 年齢が20歳以上30歳以下の人を検索
db.collectionName.find({ age: { $gte: 20, $lte: 30 } });

1つのドキュメントを取得

条件に一致する最初の1件だけを取得したい場合に使用します。

db.collectionName.findOne({ name: "太郎" });

特定のフィールドだけを取得

取得するフィールド(データ項目)を絞り込むことで、パフォーマンスを改善できます。

// nameフィールドだけを表示(_idは自動的に含まれる)
db.collectionName.find({}, { name: 1 });

// _idを除外してnameだけを表示
db.collectionName.find({}, { name: 1, _id: 0 });

結果を並び替える

// 年齢の昇順(1が昇順)
db.collectionName.find().sort({ age: 1 });

// 年齢の降順(-1が降順)
db.collectionName.find().sort({ age: -1 });

結果を制限する

ページネーション機能の実装などに使用します。

// 最初の5件だけを取得
db.collectionName.find().limit(5);

// 最初の3件をスキップして、次の5件を取得
db.collectionName.find().skip(3).limit(5);

データを更新する(Update)

1つのドキュメントを更新

更新演算子を使ってフィールドの値を変更します。

// $set: 特定のフィールドを更新
db.collectionName.updateOne({ name: "太郎" }, { $set: { age: 26 } });

// $inc: 数値を増減
db.collectionName.updateOne({ name: "太郎" }, { $inc: { age: 1 } });

// $push: 配列に要素を追加
db.collectionName.updateOne({ name: "太郎" }, { $push: { hobbies: "読書" } });

複数のドキュメントを更新

条件に一致するすべてのドキュメントを一度に更新できます。

// 年齢が25歳以下の人全員の年齢を1増やす
db.collectionName.updateMany({ age: { $lte: 25 } }, { $inc: { age: 1 } });

ドキュメントを置き換える

ドキュメント全体を新しいデータで置き換えます。指定したフィールド以外は削除されるので注意が必要です。

db.collectionName.replaceOne(
  { name: "太郎" },
  { name: "太郎", age: 26, city: "東京" }
);

データを削除する(Delete)

1つのドキュメントを削除

db.collectionName.deleteOne({ name: "太郎" });

複数のドキュメントを削除

// 年齢が30歳以上の人を全員削除
db.collectionName.deleteMany({ age: { $gte: 30 } });

すべてのドキュメントを削除

空のオブジェクトを条件に指定すると、コレクション内のすべてのドキュメントが削除されます。

db.collectionName.deleteMany({});

よく使う検索演算子

MongoDBでは演算子を使って柔軟な検索条件を指定できます。

比較演算子

// $eq: 等しい
db.collectionName.find({ age: { $eq: 25 } });

// $ne: 等しくない
db.collectionName.find({ age: { $ne: 25 } });

// $gt: より大きい
db.collectionName.find({ age: { $gt: 25 } });

// $gte: 以上
db.collectionName.find({ age: { $gte: 25 } });

// $lt: より小さい
db.collectionName.find({ age: { $lt: 25 } });

// $lte: 以下
db.collectionName.find({ age: { $lte: 25 } });

// $in: 配列内のいずれかに一致
db.collectionName.find({ age: { $in: [20, 25, 30] } });

// $nin: 配列内のいずれにも一致しない
db.collectionName.find({ age: { $nin: [20, 25, 30] } });

論理演算子

// $and: 複数条件のAND
db.collectionName.find({
  $and: [{ age: { $gte: 20 } }, { age: { $lte: 30 } }],
});

// $or: 複数条件のOR
db.collectionName.find({
  $or: [{ name: "太郎" }, { age: { $gte: 30 } }],
});

フィールド存在確認

// $exists: フィールドの存在確認
db.collectionName.find({ email: { $exists: true } });

これらの基本操作を組み合わせることで、MongoDBでのデータ操作がスムーズに行えるようになります。実際のプロジェクトでは、これらの操作をアプリケーションコードから呼び出して使用することになりますね。

Discussion