ニートが学ぶプログラミング

ニートの日記。プログラムのことやら、くだらないこと、思ったことをまとめていきます。頑張って毎日更新するぞぉ_(:3」∠)_ 更新が連続して途切れたら察してください。

MongoDBをインストールしてみた

こんにちは、鬱太郎です。先日Twitterのユーザー情報からフォロワーについて調べてみました。

www.neetaro.com

その時に、フォロワーを5000人だけでなくすべてのデータを取得してみようと思いました。そのためにはデータベースを使う必要があります。どんなデータベースがあるのかを色々と調べて、MongoDBを使う事を決めました。

今日はそのMongoDBのインストール方法についてご紹介したいと思います。

f:id:neet-utsu-taro:20171011211254j:plain

MongoDBとは

MongoDBはNoSQLデータベースの一つです。RDBMS(MySQLやPostgreSQL)のようにあらかじめ、データの形式を決めておく必要がありません。またJSON形式を取り扱うことが容易です。

MongoDBはRDBMSではなく、いわゆるNoSQLと呼ばれるデータベースに分類されるものである。RDBMSのようにレコードをテーブルに格納するのではなく、「ドキュメント」と呼ばれる構造的データをJSONライクな形式で表現し、そのドキュメントの集合を「コレクション」として管理する(このデータの物理的な格納はBSONと呼ばれるJSONのバイナリ版といえる形式で行われる)。コレクションはRDBMSのような固定的なスキーマを持たない。ドキュメントには複雑な階層構造を持たせることもでき、それらの構造に含まれるフィールドを指定したクエリやインデクス生成も簡単な指定によって行える。RDBMSのように高度な結合操作を効率的に行うことはできないが、データの追加・更新・削除・クエリは高速に行うことができる。また、アプリケーションは自身の構造やデータ型に合った自然な形でデータを格納することができるため、扱うデータの特性によっては、RDBMSよりも容易かつ迅速に開発を行える可能性がある。

MongoDB - Wikipedia

MongoDBを選んだ理由

MongoDBを選んだ理由は、

  • JSONをそのままinsertできる
  • あらかじめテーブル等を定義しなくてよい

などです。TwitterAPIはJSON形式でデータをやり取りしています。MongoDBはそのままJSONを追加できるので、今回最も適しているのかなと思いました。初めて勉強するなら、MySQLやPostgreSQLなどの難しいものよりも、データのやり取りが楽な方がいいと思ったからです。

先にJSONの全プロパティをテーブルに定義させるのは大変でしょう…

参考

qiita.com

ありがとうございます!

MongoDBをダウンロードする

MongoDB Download Center | MongoDB

上記公式サイトからmsiファイルをダウンロードします。

タブを選んでmsiファイルをダウンロードしましょう

MongoDBをインストールする

ダウンロードしたmsiファイルを実行してインストールしましょう。

環境変数を登録

mongomongodがある場所を環境変数に登録します。

Windowsボタン+Rでファイル名を指定して実行が出るので、sysdm.cplを入力して実行しましょう。

sysdm.cplを入力して、OKを押します

システムのプロパティの詳細設定タブの環境変数を選択します。

詳細設定タブの環境変数を選択します

Path変数にmongomongodのフォルダへのパスを末尾に追加します。

私の場合はC:\Program Files\MongoDB\Server\3.4\binでした。

末尾に追加する際に区切り文字の;を必ず追加してから上記パスを入力してください。

;C:\Program Files\MongoDB\Server\x.x\binですね

区切り文字を入力してから、フォルダへのパスを入力します。

実行

MongoDBをインストールしたので、実行してみましょう。

環境変数の登録確認

コマンドプロンプトを開きましょう。ファイル名を指定して実行からcmdで開きます。

cmdでコマンドプロンプトが起動します

先ほどの環境変数が登録できているかを確認します。

mongo --version

および

mongod --version

を入力しましょう。 環境変数の登録ができているかを確認します

環境変数の登録ができている場合はバージョン情報が表示されます。

サーバーの実行

環境変数の登録が住んでることも確認できたので、サーバーを立ち上げます。

コマンドプロンプトでmongodを実行しましょう。--dbpath--logpathでデータベースの場所やログの生成場所を選択できます。

mongod --dbpath ... --logpath ...

このとき指定した--dbpath--logpathのフォルダがないと、下のようにエラーが出ます。

[main] Failed global initialization: FileNotOpen: Failed to open ...

このようなエラーが出た場合は指定したフォルダを作成しましょう。もしくはアクセス制限を追加しましょう。

mongodを実行すると、何も起きませんが内部でサーバーが立ち上がります

mongodを実行するとファイアウォールのアクセス許可を聞いてくるので許可しましょう。

アクセス許可をしましょう

実行が完了すると、表面上は何も動きません。しかし、正しくサーバーは立ち上がっています。

このコマンドプロンプトは閉じずにそのままにしておきます

クライアントからデータベースにアクセス

サーバーも立ち上がったので、クライアントを使いアクセスしてみましょう。

別のコマンドプロンプトを起動しmongoを入力します。

mongoを入力するとクライアントが起動します

show dbs

と入力してみましょう

f:id:neet-utsu-taro:20171011142618p:plain

まだ何も使ってないので、0GBとなっていますね。

MongoDBにデータを追加

mongoターミナルから

use testdb

を入力しましょう。

すると

switched to db testdb

というメッセージが出ます。これから追加(検索)するデータはすべてtestdbの中に追加しますという事ですね。

f:id:neet-utsu-taro:20171011143610p:plain

コレクションの追加

コレクションとはデータベースに対するテーブルのようなものです。

db.createCollection("test")

testコレクションを追加します。

f:id:neet-utsu-taro:20171011143746p:plain

また、コマンドの入力の途中でTabキーを押すと、コマンドの候補が出現します。便利ですね。

{ "ok" : 1 }

という内容が出たら、成功です。

show collections
test

のようにコレクションが追加されたことが分かります。

クリックしてコマンドプロンプトの結果を見る

f:id:neet-utsu-taro:20171011143907p:plain

f:id:neet-utsu-taro:20171011144036p:plain

データを追加する

db.コレクション名.insert({})

で、データを追加できます。

db.test.insert({name:"testinsert",message:"hello mongodb"});

を追加してみましょう。追加する内容はJSON形式で記述する必要があります。

{プロパティ名1:値1,プロパティ名2:値2,...}といった感じですね。値は文字列の場合は"'で囲まないといけません。

追加に成功すると

WriteResult({"nInserted":1})

と出力されます。

クリックしてコマンドプロンプトの結果を見る

f:id:neet-utsu-taro:20171011144206p:plain

データを検索する

db.コレクション名.find({条件指定},{表示指定})

で指定されたコレクションの中身を検索できます。表示指定の部分は省略できます。また、無条件で検索する(すべての内容を表示)場合は条件指定も省略できます。

db.test.find();

この場合はすべての内容を表示させます。select * from testのような感じでしょうか?

条件を指定して検索する場合は

db.test.find({name:"testinsert"});

のようにします。

詳しくは、公式のドキュメントに載っています。

db.collection.find() — MongoDB Manual 3.4

クリックしてコマンドプロンプトの結果を見る

f:id:neet-utsu-taro:20171011144359p:plain

f:id:neet-utsu-taro:20171011144509p:plain

終了

クライアントの終了

クライアントはexitコマンドで終了できます。

>exit
bye

サーバーの終了

サーバーはCtrl+Cで終了できます。

終わりに

ここまで読んでくださってありがとうございます!

プログラムに興味のない方には申し訳ありません!ほーんと流し目で見ていただけたらなと思います。

次はプログラムからデータベースに追加しようと思います。

またね('ω')ノ