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

My Favorite Things - Coding or die.

とある技術者の経験記録、的な。

MongoDBメモ(その1)

dot install のレッスン動画を見ながら勉強。
http://dotinstall.com/lessons/basic_mongodb_v3/35001

この記事の範囲。 - 01 MongoDBとはなにか? - 02 MongoDBをインストールしよう - 03 用語を理解しておこう - 04 データベースを操作してみよう - 05 コレクションを操作してみよう

概要

  • ドキュメント指向(Not RDB
  • NoSQL(スキーマレス)
    • スキーマ構造を事前に決めない(便利なこともある)

インストール

yumリポジトリを登録

リポジトリファイル作成

$ sudo vi /etc/yum.repos.d/mongodb-org-3.4.repo

記述内容

[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc

yumでインストール

$ sudo yum install -y mongodb-org

起動

以下のコマンドで起動。

$ sudo service mongod start

次回以降も自動的に立ち上がるように設定。

$ sudo chkconfig mongod on

バージョン確認:

$ mongo --version

用語

階層構造

  • Database
    • Collection
      • Document

RDBに対応させると

  • Database = データベース
  • Collection = テーブル
  • Document = レコード

データ格納

JSON形式で格納される。

{field: val, field: val ...}

MongoDBではキーのことをfieldと呼ばれることもある。

スキーマレスなのでDocumentの項目があったりなかったりしても大丈夫。

{name: "yusuke", score: 30}
{name: "hosonuma", score: 58, team: 3}

データベース操作

アクセス:

$ mongo

データベースの一覧を表示

> show dbs;
admin  0.000GB
local  0.000GB

データベースの作成・切り替え

> db.createCollection("users");
{ "ok" : 1 }

コレクションが存在しないとshow dbs;では表示されないので注意。

> show dbs
admin  0.000GB
local  0.000GB

コレクションの作成

db.createCollection()で作成。

> db.createCollection("users");
{ "ok" : 1 }

コレクションが作成されればshow dbs;で表示される。

> show dbs;
admin  0.000GB
local  0.000GB
mydb   0.000GB

状態を確認する

db.stats()で確認出来る。

> db.stats();
{
    "db" : "mydb",
    "collections" : 1,
    "views" : 0,
    "objects" : 0,
    "avgObjSize" : 0,
    "dataSize" : 0,
    "storageSize" : 4096,
    "numExtents" : 0,
    "indexes" : 1,
    "indexSize" : 4096,
    "ok" : 1
}

DBの削除

db.dropDatabase()で現在のデータベースを削除する。

> db.dropDatabase();
{ "dropped" : "mydb", "ok" : 1 }

mydbが削除されている。

> show dbs;
admin  0.000GB
local  0.000GB

コレクションの操作

作成

db.createCollection()で。

> db.createCollection("users");
{ "ok" : 1 }

一覧表示

show collections;を使う。

> show collections;
users

リネーム

データベース名.Collection名.renameCollection("新しい名前");オブジェクト指向っぽいAPI

> db.users.renameCollection("customers");
{ "ok" : 1 }

ドキュメントの操作

挿入

ドキュメントを挿入すれば、コレクションは自動的に作られる。
格納するデータはJSON形式で記述する。

> db.users.insert(
... {
... name: "taguchi",
... score: 30
... }
... );
WriteResult({ "nInserted" : 1 })

> show collections;
users

スキーマレスなのでデータ構造が違っても大丈夫。

> db.users.insert({
... name: "fkoji",
... score: 50,
... tags: ["web", "mobile"]
... });
WriteResult({ "nInserted" : 1 })

JavaScriptを使う

JavaScriptを使って処理を記述できる。

> for (var i = 0; i < 10; i++) {
... db.users.insert({
... score: Math.random()
... });
... }
WriteResult({ "nInserted" : 1 })

件数表示

> db.users.count();
12

一覧表示

_idは MogoDB が自動的に振る一意なID。

> db.users.find();
{ "_id" : ObjectId("58c5458ca48b064d97084189"), "name" : "taguchi", "score" : 30 }
{ "_id" : ObjectId("58c545baa48b064d9708418a"), "name" : "fkoji", "score" : 50, "tags" : [ "web", "mobile" ] }
{ "_id" : ObjectId("58c545d2a48b064d9708418b"), "score" : 0.30322503633107833 }
{ "_id" : ObjectId("58c545d2a48b064d9708418c"), "score" : 0.5613546607214355 }
{ "_id" : ObjectId("58c545d2a48b064d9708418d"), "score" : 0.2844040596878158 }
{ "_id" : ObjectId("58c545d2a48b064d9708418e"), "score" : 0.9263121937224452 }
{ "_id" : ObjectId("58c545d2a48b064d9708418f"), "score" : 0.5939208256213909 }
{ "_id" : ObjectId("58c545d2a48b064d97084190"), "score" : 0.5308342673704005 }
{ "_id" : ObjectId("58c545d2a48b064d97084191"), "score" : 0.8924712820338384 }
{ "_id" : ObjectId("58c545d2a48b064d97084192"), "score" : 0.9430223426794738 }
{ "_id" : ObjectId("58c545d2a48b064d97084193"), "score" : 0.6797531592023286 }
{ "_id" : ObjectId("58c545d2a48b064d97084194"), "score" : 0.9737296169048628 }

削除

条件を指定しない場合は、以下のように空のJSONを渡す。

> db.users.remove({});
WriteResult({ "nRemoved" : 12 })

> db.users.find();