読者です 読者をやめる 読者になる 読者になる

さくらVPS CentOS 7でMongoDBを試してみる手順書2

さくらVPSにMongoDB ver3.4を試しにインストールしてみた際の手順書1
さくらVPSにMongoDB ver3.4を試しにインストールしてみた際の手順書2

さくらVPSにMongoDB ver3.4を試しにインストールしてみた際の手順書1のつづきです。

  1. 前提
  2. MongoDBのインストール
  3. MongoDBの起動と終了
  4. MongoDBを動かしてみる ☆今回
  5. MongoDBをNode.jsから呼び出してみる

4. MongoDBを動かしてみる ☆今回

4.1. MongoDBを動かす前の最低限の知識 - MongoDBのレコードは、JSON記法に似たドキュメント
- ドキュメントは、フィールド名とその値で構成(例:"name" : "hogehoge")
- ドキュメントにはarrayも含めることが可能
- SQLの基本操作で言うところのSelectがFind、DeleteがRemove

4.2. MongoDB Shellにテストデータを取り込む

ダウンロード用のディレクトリを作成し、
その中に公式ドキュメントで用意されている、テストデータをダウンロードします。

$cd ~
$mkdir downloads
$curl https://raw.githubusercontent.com/mongodb/docs-assets/primer-dataset/primer-dataset.json > ~/downloads/primer-dataset.json

/home/hogehoge/downloads/primer-dataset.jsonが作成されました。

中身を確認すると、{}で囲まれたとても長いファイルであることが確認できます。

内容は、たくさんのレストランの情報です。

$ tail -n 5 ~/downloads/primer-dataset.json ★後ろから5行分を表示
(以下表示内容)

{"address": {"building": "971", "coord": [-73.964618, 40.801388], "street": "Ams
terdam Ave", "zipcode": "10025"}, "borough": "Manhattan", "cuisine": "Other", "g
rades": [], "name": "Subway", "restaurant_id": "50018987"}                      
{"address": {"building": "325", "coord": [-73.99514429999999, 40.7521509], "stre
et": "W 33Rd St", "zipcode": "10001"}, "borough": "Manhattan", "cuisine": "Other
", "grades": [], "name": "Fairfield Inn Suites Penn Station", "restaurant_id": "
50018989"}                                                                      
{"address": {"building": "399", "coord": [-73.906438, 40.669367], "street": "Mot
her Gaston Blvd", "zipcode": "11212"}, "borough": "Brooklyn", "cuisine": "Other"
, "grades": [], "name": "", "restaurant_id": "50018993"}                        
{"address": {"building": "461", "coord": [-74.138492, 40.631136], "street": "Por
t Richmond Ave", "zipcode": "10302"}, "borough": "Staten Island", "cuisine": "Ot
her", "grades": [], "name": "Indian Oven", "restaurant_id": "50018994"}         
{"address": {"building": "921", "coord": [-73.9691347, 40.6389857], "street": "C
ortelyou Rd", "zipcode": "11218"}, "borough": "Brooklyn", "cuisine": "Other", "g
rades": [], "name": "Cold Press'D", "restaurant_id": "50018995"}     

このレストランのテストデータをmongodbにインポートします。
まず、MongoDBを起動します。

$sudo service mongod start

データをMongoDBにインポートします。

$ mongoimport --db test --collection restaurants --drop --file ~/download/primer-dataset.json
2017-01-17T14:40:14.567+0900    connected to: localhost
2017-01-17T14:40:14.568+0900    dropping: test.restaurants
2017-01-17T14:40:16.155+0900    imported 25359 documents

mongoimportコマンドは、読み込みが可能な規則で書かれたJSON(MongoDB用に拡張したJSONを含む)、CSV、TSVファイルを取り込むコマンドです。

MongoDBの構造はDBに紐づくCollectionにJSONのようなデータが格納されていますが、
DB
.Collection
.Document
.Document
.Document
.Document
.Collection
.Document
DB
.Collection
.Document

上記のimportコマンドでは、testというDBのrestaurantsというCollectionに取り込みを行いました。
Collectionは、RDBで言うところのTableに似た単位となります。

4.3. MongoDB Shell(mongo)の起動と終了 MongoDBを操作するのには、mongoというシェルを使います。
mongoにコマンドを打ち込むことでMongoDBを操作します。

mongoを起動します。

$mongo

すると、カーソルの一番左が「 > 」になり、mongoシェルが起動したことがわかります。

mongoシェルを終了するには、

Ctrl + C

を押下します。

4.4. Find mongoを再度起動します。

$mongo

「test」という名前がついたDBに移動します。

>use test

先程レストランのテストデータを取り込んだrestaurants Collectionから、borought(区)がManhattanのレストランを探します。

>db.restaurants.find( { "borough" : "Manhattan" } )

(とても見にくいが、よく見るとboroughがManhattanのDocumentが出力)

4.5. Insert

restaurants Collectionに、港区にあるレストランhogehogeを追加します。

> db.restaurants.insert( { "name" : "hogehoge", "borough" : "Minato-Ku" } )
WriteResult({ "nInserted" : 1 })  

Findを使って、Insertが完了したかを調べてみます。
港区で検索してみます。

> db.restaurants.find({"borough" : "Minato-Ku"})
{ "_id" : ObjectId("587db78e08cd7086ba0d6a33"), "name" : "hogehoge", "borough" : "Minato-Ku" }

ANDやOR等を使った検索はここでは扱いません。

4.6. Update

港区にあったレストランhogehogeをレストランfugaに改名させます。

>db.restaurants.update({"name":"hogehoge"},{$set:{"name":"fuga"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

4.7. Remove

レストランfugaは日本のレストランなので、このCollectionにあるのは間違っています。 fugaレストランのデータを削除します。

>db.restaurants.remove({"name":"fuga"})

以上がMongoDBの最低限の一番簡単な触りの操作です。

もう少し詳しいチュートリアルのためには、例えば公式ドキュメントがあります。