PythonでMongoDBを操作する(PyMongo)

PythonでMongoDBを操作する(PyMongo)
スポンサーリンク
スポンサーリンク

ここではPythonでMongoDBを操作する方法を解説します。
MongoDBにデータを保存することで、大規模なデータを簡単に扱うことができるようになります。

MongoDBはデータベース(DB)の一種で、NoSQL(ノーエスキューエル)に分類されます。
NoSQLとはRDB以外のDBの総称です。MongoDBの他にCassandraやDynamoDB(AWS)があります。

スポンサーリンク

RDBとNoSQLの比較

RDBはトランザクションを重要視しておりデータの整合性を保つことができます。
一方でNoSQLはデータの整合性を弱める代わりに、スケーラビリティや読み書き性能を高めたデータベースです。

用語の比較です

RDBNoSQL
データベースデータベース
テーブルコレクション
カラムフィールド
レコードドキュメント

RDBでは各フィールドのデータ型やデータの大きさ、主キーの選択など、スキーマ定義が必要です。NoSQLはこのようなスキーマ定義が不要なため、スキーマレスと言われます。

・関連記事:PythonでMySQLを操作する(PyMySQL)

使用ライブラリ

PythonからMongoDBに接続するためのライブラリは PyMongo になります。

 ライブラリ :PyMongo(公式ドキュメント
 インストール:必要

ライブラリのインストール

pip コマンドで PyMongo ライブラリをインストールします。
・関連記事:Pythonライブラリのインストール(pipの使い方)

Successfully installed pymongo-*.*.* と表示されればインストールは成功です。

MongoDBを準備する

MySQLの事前準備について解説します。
すでにMySQLを導入していて、作成済のデータベースを利用する場合は飛ばしてください。

MongoDBのインストール(Windows)

MongoDBがPCにインストールされていない場合はインストールします。

インストーラは公式サイトにアクセスして Community Server(無料版) をダウンロードします。

インストールが完了したら「C:\Program Files\MongoDB\Server\*.*\bin」に環境変数のPathを通しておきます。(*.*は、5.0などのバージョン)

MongoDBを起動する

コマンドプロンプトを開きMongoDBのサービスを起動します。
起動するには以下のように入力します。

下図のようにメッセージが表示され、MySQLを操作できる状態になります。

データベース一覧を表示してみます。
show dbs と入力するとデータベースの一覧が表示できます。

入力をやり直したい場合はCTRL+Cでクエリをキャンセルしてやり直す事ができます。

データを挿入する(insert_one)

データを挿入するには insert_one() メソッドを使用します。

RDBにおけるテーブルは、MongoDBではコレクションになります。

  コレクション.insert_one(辞書)

コレクションの全てのドキュメントには _id フィールドが必要でプライマリーキーになります。
指定しなかった場合は挿入時に自動で付与されます。これはObjectIDと呼ばれ12バイトの識別子になります。


まずライブラリのインポートを行い MongoClient() でインスタンスを作成します。
初期設定のままローカルにインストールしたMongoDBに接続する場合は、引数は省略可能です。


データベースとコレクションは存在しない場合でも書き込み時に自動的に作成されます。


データを辞書形式で指定して insert_one() でコレクションに挿入します。


またMongoDBはスキーマレスなので、既に登録されているデータのフィールドには無いフィールドとデータを後から登録することが可能です。(findの使用方法は後述)

データを一括挿入する

データを一括挿入するには、insert_many() メソッドを使用します。

 コレクション.insert_many(辞書のリスト)

データを取得する(find_one)

コレクションからデータを取得するには find_one() メソッドを使用します。

 コレクション.find_one()

ただし、find_one() では一番初めに登録されたデータしか表示されません。

複数のデータを取得するには次の find() メソッドを使用する必要があります。

全データを取得する(find)

コレクションから全てのデータを取得するには find() メソッドを使用します。

 コレクション.find()


find() の引数にクエリを指定すると、そのクエリにマッチするドキュメントが取得できます。

 コレクション.find({検索フィールド : 値})

データを更新する(update_one)

登録済のデータを更新するには update_one() メソッドを使用します。
条件に最初にマッチしたデータのみが対象になります。複数データを処理する場合は後述の update_many() を使用します。

値を上書き

値の上書き更新には set 演算子を使用します。

 コレクション.update_one( { ‘検索フィールド’ : 値} , {‘$set’ : {更新フィールド1 : 更新後の値, 更新フィールド2: 更新後の値・・・} })

値を増加・減少

データが数値の場合は追加する値(正負)を指定することで、数値の加算減算を行うことができます。
演算子は inc を使用します。(MongoDB 5.0以降対応)

 コレクション.update_one( { ‘検索フィールド’ : 値} , {‘$inc’ : {更新フィールド1 : 追加する値, 更新フィールド2: 追加する値・・・} })

フィールド名を変更

フィールドの更新も可能です。演算子は rename を使用します。(MongoDB 5.0以降対応)

 コレクション.update_one( {‘$rename’ : {フィールド1 : 変更後のフィールド名, フィールド名2 : 変更後のフィールド名, ・・・} })

データを一括で更新する(update_many)

登録済のデータを一括で更新するには update_many() を使用します。

値を上書き

値の上書き更新には set 演算子を使用します。

 コレクション.update_many( { ‘検索フィールド’ : 値} , {‘$set’ : {更新フィールド1 : 更新後の値, 更新フィールド2: 更新後の値・・・} })


第一引数の辞書を空({})で指定すると全ドキュメントが対象になります。

値を増加・減少

データが数値の場合は追加する値(正負)を指定することで、数値の加算減算を行うことができます。
演算子は inc を使用します。(MongoDB 5.0以降対応)

 コレクション.update_many( { ‘検索フィールド’ : 値} , {‘$inc’ : {更新フィールド1 : 追加する値, 更新フィールド2: 追加する値・・・} })

フィールド名を変更

フィールドの更新も可能です。演算子は rename を使用します。(MongoDB 5.0以降対応)

 コレクション.update_one( {‘$rename’ : {フィールド1 : 変更後のフィールド名, フィールド名2 : 変更後のフィールド名, ・・・} })

データを削除する(delete_one)

データを削除するには delete_one() を使用します。
条件に最初にマッチしたデータのみが対象になります。

 コレクション.delete_one({フィールド : 値})

データを一括で削除する(delete_many)

データを一括で削除するには delete_many() を使用します。

 コレクション.delete_many({フィールド : 値})


PythonでMongoDBを操作する方法を解説しました。