HYT MachineWorks

やったこととか思いついたことをメモしておくブログです。

Windows10 64bitでPythonからMongoDB(DocumentStore)を使ってみる

 MongoDBとは?

所謂、NoSQLの一種で、Document Storeと言われるタイプのデータベースです。

エクセルで例えると、行をJSONで表現して、表全体をJSONの集まりとして表現したようなものです、そんな感じです。

JSONで扱えるので、そのまま辞書型に変換して、終わったらJSONで戻すって使えるからすごいかもと思ってPythonで使ってみましたのでメモ。

 

本記事では、ver 3.6を使用しています。(現時点2018/08/03最新 ver4.0)

www.mongodb.com

そもそもダウンロードページが見当たらない

いきなりつまずきましたが、ダウンロードページのリンクは下、結構探してしまいました。

MongoDB Download Center | MongoDB

もし、ダウンロードって言うのがなかったら、Community Serverを選択するとダウンロードページがあります。

MongoDBインストールからサービス化

基本的には、下のMongoDB公式マニュアル通りやれば基本的にOK。英語だけど、ほとんど、単語だけ読めればわかるレベルで書いてくれてる。

Install MongoDB Community Edition on Windows — MongoDB Manual

基本的にって言ったのは2点あって。

  1. 途中で、Mongo CompussというGUIで操作できるツールを入れるか聞かれるが入れると何故か失敗した。なのでチェックを入れなければうまくいく
  2. サービス化する際のconfigファイルや、実行バイナリなどの引数はフルパスじゃないとダメ。あとコマンドプロンプトPowerShellで実行するのでprogram filesとかのスペースがあるとそこで引数が切れていると判定されるのでダブルクオーテーション"でくくるのを忘れないこと。(※4.0以降は、インストーラでサービス化までやってくれるみたいなので気にしなくてもいいかも)

Pythonから使う

condaもしくは、pipから

conda install pymongo

pip install pymongo

で、実際に使ってみた

from pymongo import MongoClient

# MongoClientの作成 DBIPとポートを指定
client = MongoClient("localhost", 27017)

# "test_db" データベースへ接続
db = client["test"]

# "test_collection" コレクションを参照
collection = db["test_collection"]

# サンプルデータ
test_dict = [{"name": "一号", "color": "red"},
{"name": "二号", "color": "blue"},
{"name": "三号", "color": "green"},
{"name": "四号", "color": "yellow"},
{"name": "五号", "color": "pink"}]

# コレクションへ、複数データの挿入
# 1件の場合はinsert_manyでなくinsert
result = collection.insert_many(test_dict)

# "color" フィールドが "yellow"のデータを検索
query = {"color": "yellow"}

# findで検索した結果は、カーソルのオブジェクト
print(collection.find(query))
# >>> <pymongo.cursor.Cursor object at 0x000001F7B5205A90>

# forで各要素を取り出せる
for result in collection.find(query):
print(result)
# >>> {'color': 'yellow', '_id': ObjectId('5b645be9268ff24bd8d3b3ff'), 'name': '四号'}

# もし、データベースを削除したい時
client.drop_database(db)

 って感じで使える。_idは各ドキュメントに与えられるIDで自動的に付与される。

検索結果は、ヒットしたドキュメントをまるごと全部渡されるので、受け取ったあと各要素をリスト内包表記なりで取り出して処理すればOK

結構使いやすいと思いました。