LoginSignup
3
3

More than 3 years have passed since last update.

Pythonでmongodbを操作する~その5:delete編~

Posted at

当記事の記載範囲

この記事ではPythonでmongodbに接続してから、delete(SQLで言ってもdelete)の使い方について記載します。
内容としては以下になります。

  1. delete_one
  2. 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後のデータ取得を行っています。

MongoDeleteSample.py
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を変更する

(抜粋)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のコマンドとパラメーターの設定内容がほとんど一緒で使いやすいなと感じました。

関連記事

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3