MongoDBとは?
NoSQLの一種です。NoSQLにも種類がありますがその中でもドキュメントDBに分類されます。
コレクション
RDBで言えばテーブルに当たります。
ドキュメント
RDBで言えばレコードに当たります。JSON形式、Pythonで言うところの辞書形式のデータを格納することが可能です。
特徴
事前に定義が不要でそれぞれのドキュメントごとに異なる形式のデータを保持することが可能です。
ドキュメントに格納できるもの
- 文字列
- 数値
- 配列
- 別のドキュメント
エディション
以下二つのエディションがあります。手軽に使うならクラウド版がインストール不要なので便利です。
- インストール版
- クラウド版
クラウド版利用の流れ
1.以下のサイトにアクセスする。
https://www.mongodb.com/ja-jp
2.サインアップ(ユーザー登録)する。
適当に入力します。
3.適当に入力して進めるとクラスターが作成注になります。
クラスターが出来上がるまで10分ほどかかりますのでしばしお待ちください。
4.データベースへアクセスするユーザーを作成する。
「Database Access」→「Add new Databaseuser」
- 「ユーザー名」と「パスワード」を入力する。
- Roleはとりあえず全てのDBに書き込み読み込みができるよう「Read and wite to any database」を選択すれば良いでしょう。
「Add User」をクリックします。
5.ネットワークの設定
- 「Network Access」→「Add IPAdress」をクリックします。
- どのネットワークからもアクセスできるよう「Access List Entry」に「0.0.0.0/0」を入力します。
6.クラスターへの接続用パラメータを取得する
- Databaseを選択
- 対象のクラスターの「Connect」を選択
- 「Connect to your application」の「Drivers」を選択する。
- 言語と環境を選択します。(Pythonであれば「Python」、「3.6 or later」あたりを選択しておけば良いでしょう)
- 「Add your connection string into your application code」に接続用パラメータが表示されるのでコピーします。(mongodb+srv://xxx)
- 上記の接続用パラメータは前の手順で作成したユーザー名とパスワードを埋め込んでおきます。
PythonからMongoDBにアクセスする。
パッケージのインストール
1 2 |
conda install pymongo dnspython -y conda install pillow |
MongoDBにデータを登録する
1 2 3 4 5 6 7 8 9 10 11 |
class MongoAccess: collection_name = '作成したいコレクション名' def open(self): self.client = pymongo.MongoClient('上記手順で作成した接続用パラメータ:mongodb+srv://xxxx') self.db = self.client['XXXDB'] def close(self): self.client.close() def save(self, item): self.db[self.collection_name].insert(dict(item)) |
self.db = self.client['XXXDB']
「XXXDB」という名前のDBがMongoDB上になければ作成されます。あればそこにアクセスします。
self.client.close()
MongoDBへのアクセスを閉じます。
self.db[self.collection_name].insert(dict(item))
辞書形式で保存します。
MongoDBからデータを読み出す。
1 2 3 4 5 6 7 8 9 |
import pymongo collection_name = '任意のコレクション名' client = pymongo.MongoClient('mongodb+srv://xxx') db = client['DB名'] collection = db[collection_name] for document in collection.find(): print(document) client.close() |
for document in collection.find():
findはPymongoの構文で辞書型でMongoDBに登録されたデータを取得できる。
例えば、以下のようにすればpriceというキーが3300のものだけを抽出できます。
1 |
collection.find({'price': 3300}) |
他にもpymongoにはさまざまなメソッドや機能があるので公式ドキュメントなどを見て有効活用すると良いです。
この記事へのコメントはありません。