1. MongoDBとは
- MongoDBは、米国の10gen社(現MongoDB Inc.)によって開発された、ドキュメント指向型のNoSQLデータベース。
- C++言語で開発されており、Linux/Windows/Macなど各種プラットフォームに対応している。
- JSON形式のドキュメントでデータを管理するので、階層構造や、複数のデータ型を同一フィールドとした複雑なデータ構造も扱うことができる。
- 動的にドキュメントの構造を変更できるため、柔軟なデータベース設計が可能となる。
- SQLクエリは使用できない。集計、複数データの結合(JOIN)ができない。
- 複数のデータを同時に更新するような、一貫性(整合性)のある更新処理ができない。
- ログの蓄積、データ構造が可変するシステム、単純な低負荷の読み取り/更新が大量にあるようなシステム(例:ソーシャルゲーム、SNSなど)に向いている。
2. MongoDBの導入(前準備)
- MongoDBをWidnowsローカルマシン上で動かします。MongoDBのサーバとクライアントのインストールファイルを各々ダウンロードして導入する。
MongoDB Community Server Download:
https://www.mongodb.com/try/download/community
MongoDB Shell Download(CUI コマンドライン版):
https://www.mongodb.com/try/download/community
MongoDB Compass Download (GUI版):
https://www.mongodb.com/try/download/compass
3. MongoDBサーバの起動
- Windows版をインストールした場合は、サービスで自動実行されています。
- サービスを手動実行する場合は、「コントロール・パネル」 > 「サービス」 を開き、リストから MongoDB サービスを見つけ、起動/停止ボタンを使用する。 または、コマンドプロンプトより下記のコマンドでMongoDBを起動する。
MongoDBのサービスを「起動」する場合(※管理者として実行)
> sc start MongoDB
MongoDBのサービスを「停止」する場合(※管理者として実行)
> sc stop MongoDB
4. MongoDBクライアントの起動
- MongoDB Shell(mongosh.exe)を起動する。ローカルにMongoDBサーバをインストールした場合は、exeファイルをダブルクリックするか、コマンドラインより「mongosh」とタイプして起動する。
> mongosh
デフォルトで使用するデータベースを指定しない場合、mongoshは”test”データベースをデフォルトで使用しするので、プロンプトに “test>” と表示される。
- ローカル環境とは別のサーバにMongoDBサーバをインストールした場合は、MongoDBサーバのホスト名(またはIPアドレス)、ポート番号、データベース名を指定して起動する。
> mongosh "mongodb://ホスト名:ポート番号/データベース名"
5. MongoDBコマンド
コマンドラインのMongoDB Shellのコマンドを使って、MongoDBを操作する方法について説明します。
■ データベースの一覧表示
show dbs(または show databases)でデータベースの一覧を確認する。
test> show dbs;
admin 40.00 KiB
config 60.00 KiB
local 72.00 KiB
mydb **.** KiB
■ データベースの作成/切り替え
use db名:データベース名が存在する場合は切り替え、存在しない場合は新規作成
「mydb」という名前でデータベースを作成する。
test> use mydb;
switched to db mydb
■ コレクションの作成
「test_c」という名前でコレクションを作成する。
mydb> db.createCollection("test_c");
{ ok: 1 }
■ コレクションにドキュメント(データ)を登録
「test_c」コレクションに
- { name: "太郎", age: 25, place:"東京都" }
- { name: "花子", age: 25, place:"千葉県" }
というドキュメント(データ)を登録する。
mydb> db.test_c.insertOne({ name: "太郎", age: 25, place:"東京都" });
{
acknowledged: true,
insertedId: ObjectId('659ae5788bcbc0db16bdab7d')
}
mydb> db.test_c.insertOne({ name: "花子", age: 29, place:"千葉県" });
{
acknowledged: true,
insertedId: ObjectId('659ae6f58bcbc0db16bdab7e')
}
■ コレクションのドキュメント数(データ数)を確認
ドキュメントのドキュメント数(データ数)をカウントする。
mydb> db.test_c.count();
2
■ コレクションの全ドキュメント内容を確認
ドキュメントのドキュメント数(データ数)をカウントする。
mydb> db.test_c.find();
[
{
_id: ObjectId('659ae5788bcbc0db16bdab7d'),
name: '太郎',
age: 25,
place: '東京都'
},
{
_id: ObjectId('659ae6f58bcbc0db16bdab7e'),
name: '花子',
age: 29,
place: '千葉県'
}
]
■ データのフィルタリング(検索)
.find関数に引数を指定することで、特定の条件を持っているデータのみをフィルタ検索できる。
- name(名前)が「太郎」のデータを検索する。
mydb> db.test_c.find({name:"太郎"});
[
{
_id: ObjectId('659ae5788bcbc0db16bdab7d'),
name: '太郎',
age: 25,
place: '東京都'
}
]
- age(年齢)が30歳より下のデータを検索する。
mydb> db.test_c.find({age:{"$lt":30}});
[
{
_id: ObjectId('659ae5788bcbc0db16bdab7d'),
name: '太郎',
age: 25,
place: '東京都'
},
{
_id: ObjectId('659ae6f58bcbc0db16bdab7e'),
name: '花子',
age: 29,
place: '千葉県'
}
]
- age(年齢)が25歳より上のデータを検索する。
mydb> db.test_c.find({age:{"$gt":25}})
[
{
_id: ObjectId('659ae6f58bcbc0db16bdab7e'),
name: '花子',
age: 29,
place: '千葉県'
}
]
■ ドキュメント(データ)の更新
アップデートするドキュメント(データ)が、
1件の場合:updateOne
複数個の場合:updateMany
を利用する。
- name(名前)が「太郎」のage(年齢)を25歳→29歳に更新する。
mydb> db.test_c.updateOne({name:"太郎"},{$set:{age:29}});
{
acknowledged: true,
insertedId: null,
matchedCount: 1,
modifiedCount: 1,
upsertedCount: 0
}
- age(年齢)が29歳のドキュメント(データ)について、地域(place)を全て「神奈川県」に更新する。
mydb> db.test_c.updateMany({age:29},{$set:{place:"神奈川県"}});
{
acknowledged: true,
insertedId: null,
matchedCount: 2,
modifiedCount: 2,
upsertedCount: 0
}
- .find関数で、複数データが更新されたか確認する。
mydb> db.test_c.find();
[
{
_id: ObjectId('659ae5788bcbc0db16bdab7d'),
name: '太郎',
age: 29,
place: '神奈川県'
},
{
_id: ObjectId('659ae6f58bcbc0db16bdab7e'),
name: '花子',
age: 29,
place: '神奈川県'
}
]
■ ドキュメント(データ)の削除
削除するするドキュメント(データ)が、
1件の場合:deleteOne
複数個の場合:deleteMany
を利用する。
- name(名前)が「花子」のドキュメント(データ)を削除する。
mydb> mydb> db.test_c.deleteOne({"name":"花子"})
{ acknowledged: true, deletedCount: 1 }
■ コレクションの一覧表示
- 現在使用しているデータベースのコレクションの一覧を表示する。
mydb> show collections;
test_c
■ コレクションの削除
- コレクションを削除する。
mydb> db.test_c.drop();
true
以上