Queryを手軽に試せるMongoDB環境を作成する
MongoDBのQueryを手軽に試したかったので、その環境を構築した際のメモです。
目的から以下の3つを条件にツールを探しましたが、3つ全てを満たすのがなかなか見つからず、結局 Mongo Express とJupyter notebookを組み合わせました。Web UIの
- 複数人が手軽に利用できるようにWeb UIでアクセスできること
- サンプルデータを簡単にいれれること
- Aggregation Queryを実行できること
ソース
Dockerfile
FROM jupyter/scipy-notebook
ENV TZ=Asia/Tokyo
USER root
RUN pip install pymongo
USER $NB_UID
docker-compose.yml
version: '3.1'
services:
mongo:
image: mongo:3
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: example
volumes:
- ./data/db:/data/db
- ./data/configdb:/data/configdb
mongo-express:
image: mongo-express
ports:
- 8081:8081
restart: on-failure:10
depends_on:
- mongo
environment:
ME_CONFIG_MONGODB_ADMINUSERNAME: root
ME_CONFIG_MONGODB_ADMINPASSWORD: example
jupyter-notebook:
build: .
volumes:
- ./data/notebook:/home/jovyan/work
ports:
- "8888:8888"
environment:
JUPYTER_TOKEN: jupyter
depends_on:
- mongo
開発時の一時利用なので、 restart:always
は設定していません。
しかし、 mongo-express
がMongoDBが立ち上がる前に起動し接続エラーで落ちてしまうので、restart: on-failure:10
を設定し、再試行するようにしています。
起動
docker-compose up -d
MongoDBが立ち上がるのに少し、時間がかかります。
実行
Mongo Express からサンプルデータ投入
アクセス先: http://localhost:8081
Database、Collection、Documentの作成がサクッとできます。
サンプルデータ投入
Create Database
- Create Collection
でCollectionを作成。
ここでは、test, inventoryという名前で作成New Document
で以下を貼り付けて Save
[
{ item: "journal", qty: 25, status: "A", size: { h: 14, w: 21, uom: "cm" }, tags: [ "blank", "red" ] },
{ item: "notebook", qty: 50, status: "A", size: { h: 8.5, w: 11, uom: "in" }, tags: [ "red", "blank" ] },
{ item: "paper", qty: 10, status: "D", size: { h: 8.5, w: 11, uom: "in" }, tags: [ "red", "blank", "plain" ] },
{ item: "planner", qty: 0, status: "D", size: { h: 22.85, w: 30, uom: "cm" }, tags: [ "blank", "red" ] },
{ item: "postcard", qty: 45, status: "A", size: { h: 10, w: 15.25, uom: "cm" }, tags: [ "blue" ] }
]
Jupyter notebook から接続
アクセス先: http://localhost:8888/?token=jupyter
上で作成したテストデータにJupyter notebookからアクセスします。
Jupyter notebookのコンテナからは、MongoDBにはmongodb://root:example@mongo:27017/
でアクセスできます。
例えば、statusごとの数を集計する場合は以下の感じです。
import pymongo
client = pymongo.MongoClient('mongodb://root:example@mongo:27017/')
col = client.test.inventory
pipeline = [
{
"$group": {"_id": "$status", "count": {"$sum":1}}
}
]
list(col.aggregate(pipeline)) # ==> [{'_id': 'D', 'count': 2}, {'_id': 'A', 'count': 3}]
Author And Source
この問題について(Queryを手軽に試せるMongoDB環境を作成する), 我々は、より多くの情報をここで見つけました https://qiita.com/ihgs/items/25875bccddb278f00f82著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .