NoSQL(2)・ドキュメント指向データベース
ドキュメント指向データベース
ドキュメント指向データベース(Document-Oriented Database) は, ドキュメント形式のデータをそのまま格納することができるデータベースです. ここで,ドキュメント形式とは,JSON形式 や XML形式 のことを指しています. Key-Valueストア型データベースに比べて, 階層構造など柔軟なデータ構造に対応が可能です. また,Javaに代表されるオブジェクト指向のプログラミング言語では, データをオブジェクトという単位で管理することが多く, このオブジェクトをJSONに変換して, データベースに格納することができるというメリットがあります.
JSON
JSON(JavaScript Object Notation) はJavaScriptのオブジェクト表現を基にしたデータ形式です. 基本的にはキー(Key)とバリュー(Value)の組み合わせでデータを列挙します. 下記の例では,キーは name,バリューは 岩村優 です. キーとバリューのいずれも,ダブルクオーテーションで括る必要があることに注意してください. また,バリューには,文字列,数値,オブジェクト,配列などを指定することができます.
{
"name": "岩村優",
"age": 21,
"faculty": "工学部",
"hobby": ["テニス","読書"]
}
XML
XML(Extensibile Markup Language)は, ウェブページを記述するHTMLと同様の マークアップ言語 の一つです. 要素(Element)と属性(Attribute)によって構成され, 階層的に記述することが可能なデータ形式です. 下記の例では,student や name が要素であり, age は属性を表しています. 要素は,開始タグ(<要素名>)で始まり,終了タグ(</要素名>)で終わる必要があります.
<student>
<name age="21">岩村優</name>
<faculty>工学部</faculty>
<hobbies>
<hobby>テニス</hobby>
<hobby>読書</hobby>
</hobbies>
</student>
代表的なドキュメント指向データベースには下記があります. ここでは,JSON形式のドキュメントを格納可能な MongoDB に着目します.
MongoDB
MongoDBのインストール
Windowsの場合
Windows版は,公式サイトからダウンロードしましょう. ここで,ダウンロードするパッケージは,Community Serverです (企業用の Enterprise Server を選択しないように注意). また,パッケージは ZIP を選択してください.
MacOSの場合
MacOSでは,HomeBrewを利用してインストールするのが簡単です.
brew tap
でレポジトリを追加してから,最新バージョンの4.2をインストールします(2019年11月時点).
Homebrewのインストールに関しては,他のサイトを参考にしてください.
% brew tap mongodb/brew
% brew install mongodb-community@4.2
MongoDBの起動
Windowsの場合
最初にMongoDBがデータを保存するフォルダを作成します.
Windowsの場合はc:\data\db
というフォルダを作成します.
% mkdir c:\data\db
サーバは mongod,クライアントは mongoです(mongoshに変更された). コマンドプロンプトやPowerShellで下記のコマンドを実行します(Shiftキーを押しながら右クリックで起動できる).
% mongod
% mongo
MacOSの場合
最初にMongoDBがデータを保存するフォルダを作成します.
MacOSの場合はホームディレクトリに~/data/db
というディレクトリ(フォルダ)を作成します.
% mkdir ~/data/db
サーバは mongod,クライアントは mongoです.
データの保存先を指定するため,--dbpath
で先程作成したディレクトリを指定します.
% mongod --dbpath data/db
% mongo
MongoDBのコマンド
データベースの作成
データベースを作成するには use
を利用します.
ここでは,mydbという名前のデータベースを作成します.
> use mydb
現在使用しているデータベースを確認するには db
と入力します.
> db
コレクションの作成
リレーショナルデータベースのテーブルに相当するコレクション を作成します. ここでは,studentsという名前のコレクションを作成します.
> db.createCollection("students")
データベースに存在するコレクションの一覧を表示するにはshow collections
と入力します.
> show collections
ドキュメントの登録
コレクションにドキュメントを登録するにはinsert
を利用します.
登録するドキュメントはJSON形式であり,事前にスキーマを定義する必要はありません.
このため,下記のように異なるキーを持つデータを登録することが可能です.
> db.students.insert({
"name": "岩村優",
"age": 21,
"faculty": "工学部",
"hobby": ["テニス","読書"]
})
> db.students.insert({
"name": "仙波あすか",
"faculty": "国際関係学部",
"grade": 1
})
ドキュメントの取得
コレクションに登録されているドキュメントの一覧を表示するにはfind
を利用します.
登録されたドキュメントには _id というキーが追加されていることがわかります.
これは,リレーショナルデータベースにおける主キーに相当します.
db.students.find()
条件を指定して特定のドキュメントを抽出するには,
find
の引数として条件を表すJSON形式のドキュメントを与えます.
下記の例ではnameが岩村優という条件を指定しています.
db.students.find({"name": "岩村優"})
特定のキーのみを取得するには,抽出条件の後に, 取得したいキーをJSON形式で列挙します(バリューは1に設定する).
db.students.find({"name": "岩村優"},{"name": 1, "hobby": 1})
ドキュメントの削除
ドキュメントを削除するにはremove
を利用します.
条件の指定はfind
と同じです.
db.students.remove({"name": "岩村優"})
例題
下記の愛知県内の動植物園のCSV形式のデータをJSON形式に変換し,MongoDBに登録しなさい.
データベース名はaichi ,コレクション名はgardensとすること.
また,find
で取得した出力結果を確認しなさい.
名古屋市東山動植物園,名古屋市千種区,136.977,35.153
ランの館,名古屋市中区,136.908,35.161
情報処理技術者試験・過去問
下記リンクは ITパスポート試験ドットコム, 基本情報技術者試験ドットコム, 応用情報技術者試験ドットコム, データベーススペシャリストドットコムに掲載されている問題です.