#当記事の記載範囲
この記事ではPythonでmongodbに接続してから、delete(SQLで言ってもdelete)の使い方について記載します。
内容としては以下になります。
- delete_one
- delete_many
mongodbの起動やpymongoのインストール方法については以下の記事をご覧いただければ幸いです。
https://qiita.com/bc_yuuuuuki/items/2b92598434f6cc320112
#準備データ
mongodbの準備データは以下のとおりです。
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
test 0.000GB
> show collections
employee
log
salary
> db.salary.find()
{ "_id" : ObjectId("5d4acf84de925ae437e2c124"), "name" : "佐藤", "salary" : 400000 }
{ "_id" : ObjectId("5d4acf84de925ae437e2c125"), "name" : "田中", "salary" : 500000 }
{ "_id" : ObjectId("5d4f814c950945628d663d95"), "name" : "加藤", "salary" : 400000 }
{ "_id" : ObjectId("5d4f814c950945628d663d96"), "name" : "松井", "salary" : 500000 }
{ "_id" : ObjectId("5d4fa35cb9899c6bedb140a1"), "name" : "山田", "salary" : 300000 }
{ "_id" : ObjectId("5d4fa852ee2d4a2cead2784b"), "name" : "山田", "salary" : 400000 }
#Pythonでdeleteを使ってみる
まずはdelete_oneから使ってみます。
##delete_oneの使い方
早速、サンプルのコードです。
内容はdelete前のデータ取得、delete_one、delete後のデータ取得を行っています。
from pymongo import MongoClient
class MongoDeleteSample(object):
def __init__(self, dbName, collectionName):
self.client = MongoClient()
self.db = self.client[dbName]
self.collection = self.db.get_collection(collectionName)
def find(self, projection=None,filter=None, sort=None):
return self.collection.find(projection=projection,filter=filter,sort=sort)
def delete_one(self, filter):
return self.collection.delete_one(filter)
def delete_many(self, filter):
return self.collection.delete_many(filter)
def find_one_and_delete(self, filter):
return self.collection.find_one_delete(filter)
mongo = MongoDeleteSample('test', 'salary')
print('--------------------削除前--------------------')
find = mongo.find()
for doc in find:
print(doc)
print('-------------------削除情報-------------------')
result = mongo.delete_one({'name':'山田'})
print(type(result))
print(result)
print(result.deleted_count)
print('--------------------削除後--------------------')
find = mongo.find()
for doc in find:
print(doc)
実行結果
--------------------削除前--------------------
{'_id': ObjectId('5d4acf84de925ae437e2c124'), 'name': '佐藤', 'salary': 400000.0}
{'_id': ObjectId('5d4acf84de925ae437e2c125'), 'name': '田中', 'salary': 500000.0}
{'_id': ObjectId('5d4f814c950945628d663d95'), 'name': '加藤', 'salary': 400000}
{'_id': ObjectId('5d4f814c950945628d663d96'), 'name': '松井', 'salary': 500000}
{'_id': ObjectId('5d4fa35cb9899c6bedb140a1'), 'name': '山田', 'salary': 300000}
{'_id': ObjectId('5d4fa852ee2d4a2cead2784b'), 'name': '山田', 'salary': 400000}
-------------------削除情報-------------------
<class 'pymongo.results.DeleteResult'>
<pymongo.results.DeleteResult object at 0x00000216FB2E6788>
1
--------------------削除後--------------------
{'_id': ObjectId('5d4acf84de925ae437e2c124'), 'name': '佐藤', 'salary': 400000.0}
{'_id': ObjectId('5d4acf84de925ae437e2c125'), 'name': '田中', 'salary': 500000.0}
{'_id': ObjectId('5d4f814c950945628d663d95'), 'name': '加藤', 'salary': 400000}
{'_id': ObjectId('5d4f814c950945628d663d96'), 'name': '松井', 'salary': 500000}
{'_id': ObjectId('5d4fa852ee2d4a2cead2784b'), 'name': '山田', 'salary': 400000}
'name'が'山田'のデータが1件しか削除されていないことが分かります。
##delete_manyの使い方
MongoDeleteSample.pyを変更する
mongo = MongoDeleteSample('test', 'salary')
print('--------------------削除前--------------------')
find = mongo.find()
for doc in find:
print(doc)
print('-------------------削除情報-------------------')
result = mongo.delete_many({'name':'山田'})
print(type(result))
print(result)
print(result.deleted_count)
print('--------------------削除後--------------------')
find = mongo.find()
for doc in find:
print(doc)
実行結果
--------------------削除前--------------------
{'_id': ObjectId('5d4acf84de925ae437e2c124'), 'name': '佐藤', 'salary': 400000.0}
{'_id': ObjectId('5d4acf84de925ae437e2c125'), 'name': '田中', 'salary': 500000.0}
{'_id': ObjectId('5d4f814c950945628d663d95'), 'name': '加藤', 'salary': 400000}
{'_id': ObjectId('5d4f814c950945628d663d96'), 'name': '松井', 'salary': 500000}
{'_id': ObjectId('5d4faefd0d162cddb4fa19d0'), 'name': '山田', 'salary': 300000}
{'_id': ObjectId('5d4faf056d857bceb9bd0c06'), 'name': '山田', 'salary': 400000}
-------------------削除情報-------------------
<class 'pymongo.results.DeleteResult'>
<pymongo.results.DeleteResult object at 0x000001722C7CBCC8>
2
--------------------削除後--------------------
{'_id': ObjectId('5d4acf84de925ae437e2c124'), 'name': '佐藤', 'salary': 400000.0}
{'_id': ObjectId('5d4acf84de925ae437e2c125'), 'name': '田中', 'salary': 500000.0}
{'_id': ObjectId('5d4f814c950945628d663d95'), 'name': '加藤', 'salary': 400000}
{'_id': ObjectId('5d4f814c950945628d663d96'), 'name': '松井', 'salary': 500000}
'name'が'山田'のデータが2件削除されていることが分かります。
#感想
Pythonからmongodbを操作する方法がこれでCRUDの一通りのやり方が分かりました。
mongodbのコマンドとパラメーターの設定内容がほとんど一緒で使いやすいなと感じました。
#関連記事