さくらVPS CentOS 7でMongoDBを試してみる手順書2
さくらVPSにMongoDB ver3.4を試しにインストールしてみた際の手順書1
さくらVPSにMongoDB ver3.4を試しにインストールしてみた際の手順書2
さくらVPSにMongoDB ver3.4を試しにインストールしてみた際の手順書1のつづきです。
- 前提
- MongoDBのインストール
- MongoDBの起動と終了
- MongoDBを動かしてみる ☆今回
- 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の最低限の一番簡単な触りの操作です。