PythonでMongoDBを操作しよう!データの挿入・更新・削除を初心者向けに徹底解説
生徒
「Pythonを使ってMongoDBのデータを書き換えたり消したりする方法を知りたいです!」
先生
「MongoDBでは、データの追加、書き換え、削除といった操作がとても直感的に行えますよ。PyMongoというライブラリを使います。」
生徒
「具体的にはどんな命令を使うんですか?」
先生
「挿入、更新、削除の3つの基本操作を、初心者の方でもわかるように順番に解説していきますね!」
1. データの挿入:新しい情報をデータベースに追加する
プログラミングでデータを扱うとき、最も基本となるのが「新しい情報を入れる」という作業です。これを専門用語で挿入(インサート)と呼びます。パソコンを触ったことがない方に例えると、真っ白なノートに新しく文字を書き込んだり、空のフォルダに新しいファイルを保存したりするような感覚です。
MongoDBでは、データを「書類(ドキュメント)」のような形で管理します。Pythonでは、この書類を「辞書形式」という書き方で作成します。{ "項目名": "中身" }という書き方ですね。これ一組を一つのデータとしてデータベースに放り込みます。一行の命令で、あなたの用意した情報がデータベースという大きな保管庫にしっかりと保存されます。
2. insert_oneメソッド:一件のデータを挿入する
まずは、たった一つのデータを新しく追加する方法を見ていきましょう。使う命令は insert_one(インサート・ワン)です。名前の通り「一つ挿入する」という意味です。例えば、お料理レシピのデータベースを作るとしましょう。新しいレシピを一品だけ登録したいときにこの命令を使います。
以下のコードは、Pythonを使ってMongoDBに接続し、「カレーライス」というデータを一件だけ追加するプログラムです。データの形がPythonの辞書そのものなので、とても読みやすいのが特徴です。
from pymongo import MongoClient
# データベースへの接続準備(自分のパソコンに繋ぎます)
client = MongoClient('mongodb://localhost:27017/')
db = client['recipe_database']
collection = db['menu_list']
# 追加したいデータを作成(辞書形式)
new_recipe = {
"料理名": "カレーライス",
"調理時間": 30,
"難易度": "簡単"
}
# データを一件挿入する
result = collection.insert_one(new_recipe)
print("新しいレシピを保存しました!")
print("データ固有の背番号:", result.inserted_id)
実行すると、データベースが自動的にそのデータに「背番号(ID)」を割り振ってくれます。これで、後からそのデータを特定できるようになります。
3. データの更新:保存済みの情報を書き換える
一度保存した情報を、後から書き換えたいこともありますよね。これを更新(アップデート)と呼びます。例えば、「カレーライスの調理時間が実は40分だった」と判明したときに、その部分だけを修正する作業です。ノートに書いた文字を消しゴムで消して、新しい情報を書き直すイメージですね。
MongoDBの更新は、「どのデータを変えるか」という条件と、「どう変えるか」という内容の二つを指定して行います。これによって、全然関係ないデータまで間違えて書き換えてしまうのを防ぐことができます。非常に安全で確実な方法です。
4. update_oneメソッド:特定の情報を一件だけ書き換える
情報を書き換えるときは update_one(アップデート・ワン)という命令を使います。この命令を使うときは $set(セット)という特殊な記号を使います。これは「この項目をこの内容にセットし直してね」という指示になります。
以下のコードでは、先ほど登録した「カレーライス」の調理時間を30分から45分に変更しています。条件を指定することで、特定のデータだけを狙い撃ちで修正できます。
# どのデータを変えるか(検索条件)
filter_condition = {"料理名": "カレーライス"}
# どう書き換えるか(更新内容)
new_values = {"$set": {"調理時間": 45}}
# データを一件更新する
collection.update_one(filter_condition, new_values)
print("調理時間を更新しました!")
このように、元のデータを一度全部消して作り直す必要はありません。変えたい部分だけをスマートに修正できるのがプログラミングの便利なところです。
5. データの削除:不要になった情報を消去する
最後に紹介するのが、データの削除(デリート)です。使わなくなった情報をデータベースから完全に取り除く作業です。フォルダに入っているファイルをゴミ箱に捨てて、空にするような操作ですね。一度消してしまうと元に戻すのは大変なので、慎重に行う必要があります。
削除も更新と同じように、「どのデータを消すか」という条件を指定します。もし条件を指定せずに実行してしまうと、大事なデータまで消えてしまう可能性があるため、命令の書き方には決まりがあります。初心者の方は、まずは一件だけを消す方法からマスターしましょう。
6. delete_oneメソッド:一件のデータを削除する
特定のデータを一つだけ消去するには delete_one(デリート・ワン)を使います。例えば、メニューから「カレーライス」を削除したい場合は、料理名を条件にしてこの命令を呼び出します。
以下のコードは、条件に一致するデータを一件だけ探して、それをデータベースから削除するプログラムです。実行後、データベースの中身を確認しても、そのデータはもうどこにも見つかりません。
# どのデータを消すか(削除条件)
delete_condition = {"料理名": "カレーライス"}
# データを一件削除する
collection.delete_one(delete_condition)
print("指定したレシピを削除しました。")
もし同じ名前のデータが複数あったとしても、この命令であれば一番最初に見つかった一件だけが消されます。全部まとめて消したいときは別の命令がありますが、間違いを防ぐためにはこの「一つずつ操作する」感覚がとても大切です。
7. まとめて操作するメリットと使い分け
ここまで「一件ずつ」の操作を見てきましたが、実はMongoDBには「まとめて挿入」「まとめて更新」「まとめて削除」という命令も存在します。例えば、100人分の名簿を一気に入れたいときに、100回命令を出すのは大変ですよね。そんな時に insert_many(インサート・メニー)などを使います。
しかし、プログラミング未経験の方が最初に覚えるべきは、やはり今回紹介した _one がつく基本操作です。一つ一つの動きを確実に理解することで、プログラムがどうやってデータを動かしているのかという本質が見えてきます。複雑なことは、基本が完璧になってから挑戦すれば大丈夫です。
8. データの型に注意!数字と文字の違い
データを扱うときに初心者が一番つまずきやすいのが、「文字」と「数字」の違いです。例えば、"30"(文字としての30)と 30(計算できる数字の30)は、コンピューターにとっては全くの別物です。更新や削除の条件を指定するときに、ここを間違えると思った通りに動きません。
MongoDBはデータの形に自由ですが、自由だからこそ、自分が今扱っているのが「文字」なのか「数字」なのかを意識することがデバッグ(間違い探し)のコツになります。以下のプログラムで、自分のデータの状態をしっかり確認する習慣をつけましょう。
# 良い例:数字はそのまま書く
data_correct = {"年齢": 20}
# 注意が必要な例:クォーテーションで囲むと文字になる
data_string = {"年齢": "20"}
if type(data_correct["年齢"]) == int:
print("これは数字(整数)として認識されています。")
9. クエリ(条件)の組み合わせで自由自在
更新や削除のときに使う「条件」のことを専門用語でクエリと呼びます。今回は「料理名がカレーライス」という単純な条件でしたが、実はもっと複雑な指定もできます。「調理時間が30分以下のものだけ」や「難易度が簡単で、かつ材料に肉を含むもの」といった具合です。
このクエリを使いこなせるようになると、大量のデータの中から必要なものだけを瞬時に見つけ出し、一括でメンテナンスできるようになります。PythonとMongoDBの組み合わせは、こうした複雑な操作も短いコードで書けるのが最大の魅力です。まずは「イコール(同じもの)」の条件から練習していきましょう。
10. 安全に操作するための心がけ
最後に、データベース操作において最も大切なことをお伝えします。それは「バックアップ」と「確認」です。特に削除や更新は、一度実行すると元に戻すのが非常に困難です。初心者のうちは、実際にデータを消したり変えたりする前に、まずは find_one 命令で「本当にそのデータが存在するか」を確認する癖をつけましょう。
自分の書いたコードが正しく動いて、データベースの中身が思い通りに変わった時の喜びは格別です。挿入・更新・削除の基本をマスターすれば、あなたはもう立派なデータ操作の初心者脱出です。焦らず一歩ずつ、楽しみながらコードを書いていきましょう!