MongoDB(19) - ドキュメント削除編

今回は、ドキュメントの削除を行います。

サンプルデータ

次のようなデータをcol1コレクションに設定します。

[Mongoシェル]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
> db.col1.insertMany([{name:"白石", age:29},
{name:"嘉喜", age:19},
{name:"西野", age:28},
{name:"武元", age:5}])
{
"acknowledged" : true,
"insertedIds" : [
ObjectId("612d8ecb86b5a5660ce2fd20"),
ObjectId("612d8ecb86b5a5660ce2fd21"),
ObjectId("612d8ecb86b5a5660ce2fd22"),
ObjectId("612d8ecb86b5a5660ce2fd23")
]
}

> db.col1.find()
{ "_id" : ObjectId("612d8ecb86b5a5660ce2fd20"), "name" : "白石", "age" : 29 }
{ "_id" : ObjectId("612d8ecb86b5a5660ce2fd21"), "name" : "嘉喜", "age" : 19 }
{ "_id" : ObjectId("612d8ecb86b5a5660ce2fd22"), "name" : "西野", "age" : 28 }
{ "_id" : ObjectId("612d8ecb86b5a5660ce2fd23"), "name" : "武元", "age" : 5 }

1件削除

ドキュメントを1件削除する場合は、deleteOneを使います。

第1引数に検索条件を指定します。

[Mongoシェル]

1
2
3
4
5
6
7
> db.col1.deleteOne({name:"西野"})
{ "acknowledged" : true, "deletedCount" : 1 }

> db.col1.find()
{ "_id" : ObjectId("612d8ecb86b5a5660ce2fd20"), "name" : "白石", "age" : 29 }
{ "_id" : ObjectId("612d8ecb86b5a5660ce2fd21"), "name" : "嘉喜", "age" : 19 }
{ "_id" : ObjectId("612d8ecb86b5a5660ce2fd23"), "name" : "武元", "age" : 5 }

nameが”西野”のドキュメントだけが削除されました。

もし検索条件に複数のドキュメントが一致しても、削除されるのは1件のみとなります。

複数削除

ドキュメントを複数削除する場合は、deleteManyを使います。

第1引数に検索条件を指定します。

今回は、検索条件を指定せずに全件削除してみます。

[Mongoシェル]

1
2
3
4
5
> db.col1.deleteMany({})
{ "acknowledged" : true, "deletedCount" : 3 }

> db.col1.find()

問題なく全件削除されました。

コレクション内のドキュメントを全件削除する場合は、deleteOneや一括高速処理のBulkで削除するよりもコレクション自体を削除したほうが速いとのことなので、コレクション名.drop()の方を使いましょう。

Pythonで操作

上記の更新処理をPythonで行うと、次のようになります。

[ソースコード]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import pymongo
from pymongo import MongoClient

# MongoDB操作用のインスタンスを作成
client = MongoClient() # [IPとポートを指定する場合] MongoClient('10.200.243.203', 27017')

# データベースの取得
db1 = client.db1

# 1件削除
db1.col1.delete_one({'name':'西野'})

# 結果表示
for doc in db1.col1.find():
print(doc)

# 複数削除
db1.col1.delete_many({})

# 結果表示
for doc in db1.col1.find():
print(doc)

次回は、データの集計(aggregate)を行います。