今回からは、MongoDBの更新に関する動作を確認していきます。
サンプルデータ
次のようなデータをcol1コレクションに設定します。
[Mongoシェル]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| > db.col1.insertOne({name:'高山', age:20}) { "acknowledged" : true, "insertedId" : ObjectId("6126f663f49ea66243206a1b") }
> db.col1.insertOne({name:'生田', age:11}) { "acknowledged" : true, "insertedId" : ObjectId("6126f663f49ea66243206a1c") }
> db.col1.insertOne({name:'菅井', age:34}) { "acknowledged" : true, "insertedId" : ObjectId("6126f663f49ea66243206a1d") }
> db.col1.find() { "_id" : ObjectId("6126f663f49ea66243206a1b"), "name" : "高山", "age" : 20 } { "_id" : ObjectId("6126f663f49ea66243206a1c"), "name" : "生田", "age" : 11 } { "_id" : ObjectId("6126f663f49ea66243206a1d"), "name" : "菅井", "age" : 34 }
|
1件更新
ドキュメントを1件更新する場合は、updateOneを使います。
第1引数には検索条件を指定し、第2引数には$setを使い更新内容を設定します。
[Mongoシェル]
1 2 3 4 5 6 7
| > db.col1.updateOne({name:"高山"}, {$set:{age:21}}) { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
> db.col1.find() { "_id" : ObjectId("6126f663f49ea66243206a1b"), "name" : "高山", "age" : 21 } { "_id" : ObjectId("6126f663f49ea66243206a1c"), "name" : "生田", "age" : 11 } { "_id" : ObjectId("6126f663f49ea66243206a1d"), "name" : "菅井", "age" : 34 }
|
nameが“高山”のドキュメントに関して、ageを21に更新しました。
updateOneでは、検索条件に一致するデータが複数あっても、1件しか更新されません。
複数件更新
ドキュメントを複数更新する場合は、updateManyを使います。
第1引数には検索条件を指定し、第2引数には$setを使い更新内容を設定します。
[Mongoシェル]
1 2 3 4 5 6 7
| > db.col1.updateMany({}, {$set:{age:50}}) { "acknowledged" : true, "matchedCount" : 3, "modifiedCount" : 3 }
> db.col1.find() { "_id" : ObjectId("6126f663f49ea66243206a1b"), "name" : "高山", "age" : 50 } { "_id" : ObjectId("6126f663f49ea66243206a1c"), "name" : "生田", "age" : 50 } { "_id" : ObjectId("6126f663f49ea66243206a1d"), "name" : "菅井", "age" : 50 }
|
全てのドキュメントに対して、ageを50に変更しました。
検索条件になにも設定しないと、全てのドキュメントが更新されます。
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
client = MongoClient()
db1 = client.db1
db1.col1.update_one({'name':'高山'}, {'$set':{'age':21}})
for doc in db1.col1.find(): print(doc)
db1.col1.update_many({}, {'$set':{'age':50}})
for doc in db1.col1.find(): print(doc)
|
次回は、ドキュメントの入れ替えとフィールドの追加を行います。