✔️
【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