pymongoを使ってpythonでMongoDBを操作する
今回は、pythonライブラリのpymongoを使ってMongoDBのデータを操作する
pymongoとは
pythonでMongoDBを操作するためのオープンソースライブラリ
主な機能
mongoDBへの接続
DBへのデータの挿入
DB内のデータ検索
DB内のデータ削除
DB内のデータ更新
チュートリアル
データの挿入、検索、取得
発展として集約したのちにデータを取得する
①pymongoのインストール
②MongoDBへの接続
pymongoのMongoClientをimport
code:pymongo_t
from pymongo import MongoClient
# MongoDBに接続
client = MongoClient('localhost', 27017) #デフォルト client = MongoClient('bind.Ipに記述したIPアドレス', 27017)
③DBへのデータ挿入
jsonファイルのデータをDBに挿入する
一つのドキュメント(データ)を挿入するときはinsert_one()
複数のドキュメントを一度に挿入するときはinsert_many()
code:pymongo_t
from pymongo import MongoClient
import json
# MongoDBに接続
client = MongoClient('localhost', 27017) #デフォルト #client = MongoClient('bind.Ipに記述したIPアドレス', 27017) #col = client.'DB名'.'collection名' col = client.test_db.test_collection
# JSONファイルの読み込み
with open('test.json', 'r', encoding='utf-8') as file:
data = json.load(file)
# 特定のキーに対応する値を取り出す
title_key = "title"
for movie_data in data:
# データをデータベースに挿入
data_to_insert = {"title": title_value}
col.insert_one(data_to_insert)
client.close()
④データの検索・取得
DB内のデータで指定の条件を満たすデータを検索し、取得する流れ
データを取得する時はfind()
今回は、titleキーの値が ’君の名は’ であるデータだけを検索し取得する
code:pymongo_t
from pymongo import MongoClient
# MongoDBに接続
client = MongoClient('localhost', 27017) #デフォルト #client = MongoClient('bind.Ipに記述したIPアドレス', 27017) test = client.test_db.test_collection
result = test.find({"title": "君の名は"})
#result = list(test.find({"title": "君の名は"})) 発展
aggregate()を使うと、DB内のデータを集約したうえで必要な分だけデータを取得できる
SQLでいうところの集計関数だが、WHERE句が$match、GROUP BY句が$groupのように少しづつ表現が異なるため、その場で調べながらコードを書くのがよい
例:testdb内にある映画タイトルとレビューがセットで格納されたtest_trコレクションから、レビューの数が多い映画タイトル上位10件だけを取得する
code:pymongo_a
from pymongo import MongoClient
# MongoDBに接続
client = MongoClient('localhost', 27017) #デフォルト #client = MongoClient('bind.Ipに記述したIPアドレス', 27017) db_collection = client.testdb.test_tr
# タイトルの重複をカウントするクエリ
# 集計パイプラインを定義
pipeline = [
{"$group": {"_id": "$title", "count": {"$sum": 1}}},
{"$sort": {"count": -1}},
{"$limit": 10}
]
# 集計パイプラインを実行
top10_titles = list(db_collection.aggregate(pipeline))
DBのデータ形式や扱いたいデータ形式に合わせたデータ取得が重要!