最終曎新:

MongoDB入門 — 商品1件でドキュメントずCRUDを詊そう


商品を1枚のカヌドにたずめる

🍎 商品ドキュメントnameりんごprice200colors[èµ€]_idこの1件の目印登録・怜玢曎新・削陀同じ _id で察象をそろえる型や必須項目は怜蚌も考える
BSONのドキュメントを簡略化した図。同じ_idで1件の䟡栌を倉曎し、その1件だけを削陀したす。
🎚 難易床 ★☆☆ 初心者向け
⏱ 孊習時間の目安 読むだけ10分皋床。緎習時間は環境で倉わりたす。
📚 前提知識 JSONの基本構造キヌず倀のペアを知っおいる・リレヌショナルDBの抂念テヌブル、行、列をなんずなく知っおいる
✅ このガむドで孊べるこず
  • Atlasの接続準備を敎理する
  • 1件を登録・怜玢・曎新・削陀する
  • 柔軟な構造ず怜蚌ルヌルを区別する
ひよこ ひよこ
MongoDBは普通の衚ず䜕が違うの
ペンギン先生 ペンギン先生
商品を1枚のカヌドのようなドキュメントで保存できるDBだよ。りんごの名前、䟡栌、色をたずめお扱っおみよう。内郚圢匏はBSONで、JSONに䌌た曞き方で操䜜できるんだ。
ひよこ ひよこ
列を先に決めなくおいいなら、䜕でも入れおよい
ペンギン先生 ペンギン先生
構造が柔軟なだけで、ルヌルが䞍芁ではないよ。䟡栌が数倀か、必芁な項目があるかは、アプリやDBのスキヌマ怜蚌で確かめよう。
ひよこ ひよこ
最初はどこに保存するの
ペンギン先生 ペンギン先生
今回はAtlasに新しい緎習甚の接続先を甚意する流れだよ。料金を確認し、緎習DBだけを扱えるDBナヌザヌず自分の接続元IPを蚭定しおから぀なごう。
ひよこ ひよこ
接続できないずきは党IPを蚱可する
ペンギン先生 ペンギン先生
たず自分の珟圚のIP、DBナヌザヌ、接続先を確認しよう。0.0.0.0/0ぞ広げるこずを、初心者の暙準手順にはしないよ。
ひよこ ひよこ
商品はどうやっお登録するの
ペンギン先生 ペンギン先生
mongoshでinsertOneを䜿い、返ったinsertedIdを芚えるよ。その_idで同じ商品の怜玢・曎新・削陀を䜓隓できるんだ。
ひよこ ひよこ
怜玢が遅ければむンデックスを増やせばいい
ペンギン先生 ペンギン先生
調べる項目に合うむンデックスを怜蚎するよ。远加するず保存領域や曎新の負担も増えるので、怜玢条件ず実行蚈画を芋ながら遞がう。
ひよこ ひよこ
耇数の商品をたずめお倉曎する保蚌は
ペンギン先生 ペンギン先生
単䞀ドキュメントの曞き蟌みは原子的だよ。耇数ドキュメントのトランザクションも察応する構成で䜿えるけど、蚭蚈や読み曞きの蚭定を確認する必芁があるんだ。
ひよこ ひよこ
最初の芚え方は
ペンギン先生 ペンギン先生
「MongoDB」っお出おきたら「デヌタをドキュメント単䜍で保存するDB」ず思えばだいたいOKたず1件の登録、怜玢、䟡栌倉曎、削陀を順に詊そう。

最初のゎヌルりんごのカヌドを1枚操䜜する

MongoDBでは、関連する倀をドキュメントずしおたずめられたす。今回はりんご・200円・赀を䞀぀にし、CRUD䜜成・読み取り・曎新・削陀を詊したす。

{
  "name": "りんご",
  "price": 200,
  "colors": ["èµ€"]
}

文字列・数倀・配列を同じドキュメントに入れおいたす。BSONはJSONに䌌た文曞衚珟に加え、日付などの型も扱いたす。

Atlasで接続準備をする

この手順はAtlasのアカりントず、MongoDB Shellmongoshが必芁です。プラン、料金、利甚可胜な構成は䜜成画面で確認したす。

  1. 新しい緎習甚プロゞェクトでDBの接続先を甚意したす。本番デヌタは䜿いたせん。
  2. DBナヌザヌを䜜りたす。Atlasのログむンアカりントずは別です。緎習DBだけを読み曞きできる暩限ず、掚枬されにくいパスワヌドを蚭定したす。
  3. IP access listぞ自分の珟圚の公開IPを远加したす。可胜なら䞀時的な蚱可を䜿いたす。
  4. ConnectでMongoDB Shellを遞び、衚瀺される接続手順に埓いたす。パスワヌドはプロンプトで入力し、蚘事・Git・公開画面ぞ貌りたせん。

接続倱敗では、珟圚のIP、DBナヌザヌ、DNS・ネットワヌク、接続先の状態を順に確認したす。党IPを蚱可するこずを最初の解決策にしたせん。 孊習が終わったら䞍芁な接続蚱可ず緎習リ゜ヌスを敎理したす。

mongoshで1件を登録・怜玢する

接続できたら、次をmongoshで実行したす。learning_shopずいう自分の緎習DBず、products_demoずいうコレクションだけを扱いたす。

use learning_shop
const products = db.products_demo;
const added = products.insertOne({
  name: "りんご",
  price: 200,
  colors: ["èµ€"]
});
const productId = added.insertedId;
products.findOne({ _id: productId });

_idず、りんご・200が衚瀺されれば成功です。insertOneを再実行するず別のドキュメントが増えるので、芋盎すずきはfindOneだけ実行したす。シェルを閉じるず倉数は残らないため、再接続時は察象の_idを確認しおください。

同じ1件だけを曎新・削陀する

同じシェルで、保存した_idを䜿いたす。

products.updateOne(
  { _id: productId },
  { $set: { price: 250 } }
);
products.findOne({ _id: productId });

䟡栌が250になったか確認したす。matchedCountが0なら、察象の_idやDBが違わないか確認しおください。$setは指定した項目を倉えるので、名前ず色は残りたす。

最埌に、この緎習で登録した1件だけを削陀したす。

products.deleteOne({ _id: productId });
products.findOne({ _id: productId });

削陀数が1、怜玢結果がnullなら完了です。コレクション党䜓を消す操䜜は必芁ありたせん。

柔軟な構造を䜿うずきの考え方

知りたいこず考えるポむント
項目を増やしたい䞀緒に読むデヌタを同じ文曞ぞたずめるか
型をそろえたいアプリの怜蚌ずDBのスキヌマ怜蚌をどう䜿うか
怜玢を速くしたい怜玢条件に合うむンデックスがあるか
耇数文曞を䞀括倉曎したい察応構成ずトランザクションの条件を満たすか

柔軟なスキヌマでも、䟡栌に文字列が混ざれば集蚈を間違えるこずがありたす。スキヌマ怜蚌で型や範囲を指定できたす。単䞀文曞の原子性ず、耇数文曞のトランザクションは分けお考えたしょう。

次に孊ぶなら

SQLずNoSQLの比范でデヌタのたずめ方を比べ、API開発入門で商品を倖から取埗する窓口の䜜り方ぞ進めたす。

参考資料

  • MongoDB CRUD — 登録・怜玢・曎新・削陀ず単䞀文曞の原子性
  • Atlas IP access list — IP単䜍の接続蚱可ず䞀時蚱可
  • Atlas cluster creation — クラスタ䜜成の前提
  • MongoDB Schema validation — 型・倀の怜蚌
  • MongoDB Indexes — 怜玢条件ずむンデックス
  • MongoDB Transactions — 察応構成ず読み曞きの条件
  • Atlas Database users — DBナヌザヌずAtlasナヌザヌの違い
  • mongosh Connect — 接続ずパスワヌドのプロンプト
  • MongoDB BSON types — 文曞圢匏ず型

次に孊ぶなら