MongoDBを使ってみる

MongoDBについて

MongoDBは、NoSQLの一種でドキュメント型と呼ばれるデータベース。
オープンソースとして公開されている。
柔軟なデータ構造と高い書き込み性能、使いやすさが特徴。
1つのデータベースは複数のコレクションを持ち、
1つのコレクションは複数のドキュメントを持つ。
有名な無料資料があるみたい。
mongodbの薄い本

RDB用語との対応表
RDB MongoDB
テーブル構造 JSON形式
SQL文 Mongoクエリ
データベース データベース
テーブル コレクション
レコード ドキュメント
フィールド(カラム) フィールド
インデックス インデックス
Primary key _id

 

インストール手順

ダウンロードページにアクセス
https://www.mongodb.org/dl/linux/x86_64
最新バージョン(mongodb-linux-x86_64-x.x.x.tgz) のダウンロードリンクをコピー
http://downloads.mongodb.org/linux/mongodb-linux-x86_64-4.0.9.tgz

mkdir -p $HOME/src
mkdir -p $HOME/local/mongodb4.0.9

cd $HOME/src
wget http://downloads.mongodb.org/linux/mongodb-linux-x86_64-4.0.9.tgz # コピーしたリンク
tar xvzf mongodb-linux-x86_64-4.0.9.tgz
rsync -av mongodb-linux-x86_64-4.0.9/ $HOME/local/mongodb4.0.9/

#sudo vim /etc/profile.d/mongo.sh
#export MONGO_HOME=/usr/local/mongo
#export PATH=$PATH:$MONGO_HOME/bin

echo 'export MONGO_HOME=$HOME/local/mongodb4.0.9/' | sudo tee /etc/profile.d/mongo.sh
echo 'export PATH=$PATH:$MONGO_HOME/bin' | sudo tee -a /etc/profile.d/mongo.sh

sudo mkdir -p /data/db
sudo chown : /data/db
sudo chmod 777 /data/db
mongod

補足

/etc/profile.d/ はアプリケーションごとのbashを配置するディレクトリらしい。

bashの実行順序
1. /etc/profileを実行
2. /etc/profileによって、/etc/profile.dディレクトリ配下のすべてのファイルを実行
3. ログインユーザーのホームディレクトリにある~/.bash_profileを実行
4. ~/.bash_profileによって、~/.bashrcを実行
5. ~/.bashrcによって、/etc/bashrcを実行

MongoDBの基本操作

# MongoDBのコンソールに接続
mongo

# DBを表示
show dbs
# show databases でもおk

# DBを作成
use game

# Collectionを表示
show collections
# show tables でもおk

# DBを削除
db.dropDatabase()

# DBの構成を表示
db.stats()

# コレクションの作成
db.createCollection('release')

# コレクションの削除
db.release.drop()

# インサート
db.release.insert({'title': 'ASTRO BOT:RESCUE MISSION', 'platform': 'PS4', 'release_date': '2018-10-04 00:00:00'})
db.release.insertMany([
    {'title': 'The Legend of Zelda: Breath of the Wild', 'platform': 'Switch', 'release_date': '2017-03-03 00:00:00'},
    {'title': 'Super Mario Odyssey', 'platform': 'Switch', 'release_date': '2017-10-27 00:00:00'},
])

# 削除
db.release.remove({'title': 'Super Mario Odyssey'})

# セレクト
db.release.find()

# アップデート
db.release.update( { 'title':'The Legend of Zelda: Breath of the Wild' }, { $set:{ 'title': 'Zelda Breath of the Wild' } } )

 

PyMongoの使い方

MongoDBの接続にPyMongoを使ってみる。
MongoDB公式のPythonバインディングらしい。
インストールはこれだけ pip install pymongo

from pymongo import MongoClient

# 27017はデフォルトポートなので省略化
client = MongoClient('localhost', 27017)

# game database を作成
db = client.game
# db = client['game'] # 属性で表せない名前の場合は、dictのスタイルでも可能

# release table を作成
collection = db.release
# collection = db['release']

# インサート
collection.insert_one({'title': 'ASTRO BOT:RESCUE MISSION', 'platform': 'PS4', 'release_date': '2018-10-04 00:00:00'})
collection.insert_many([
    {'title': 'The Legend of Zelda: Breath of the Wild', 'platform': 'Switch', 'release_date': '2017-03-03 00:00:00'},
    {'title': 'Super Mario Odyssey', 'platform': 'Switch', 'release_date': '2017-10-27 00:00:00'},
])

# find()メソッドですべてのドキュメントを取得するためのCursorオブジェクトを取得できる
# すべてのドキュメントには_idフィールドが自動で付与される(ObjectIdと呼ばれる12バイトの識別子)
collection.find()

# Cursorオブジェクトはfor文で順次アクセスできる
for platform in collection.find():
    print(platform)

# platformフィールドが'Switchであるドキュメントにマッチ
for platform in collection.find({'platform': 'Switch'}):
    print(platform)

# find_one()メソッドは条件にマッチする最初のドキュメントを取得する
collection.find_one()

# find()と同様に引数にクエリを指定できる
collection.find_one({'platform': 'PS4'})

コメント

タイトルとURLをコピーしました