今回は、ドキュメントの入れ替えとフィールドの追加を行います。
サンプルデータ
次のようなデータをcol1コレクションに設定します。
[Mongoシェル]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| > db.col1.insertOne({name:'高山', age:20}) { "acknowledged" : true, "insertedId" : ObjectId("61282d03a951707ba58eecdd") } > db.col1.insertOne({name:'生田', age:11}) { "acknowledged" : true, "insertedId" : ObjectId("61282d0aa951707ba58eecde") } > db.col1.insertOne({name:'菅井', age:34}) { "acknowledged" : true, "insertedId" : ObjectId("61282d12a951707ba58eecdf") } > db.col1.find() { "_id" : ObjectId("61282d03a951707ba58eecdd"), "name" : "高山", "age" : 20 } { "_id" : ObjectId("61282d0aa951707ba58eecde"), "name" : "生田", "age" : 11 } { "_id" : ObjectId("61282d12a951707ba58eecdf"), "name" : "菅井", "age" : 34 }
|
ドキュメント入れ替え
ドキュメントの入れ替えとは、_id(主キー)以外のフィールドを削除して、新しいフィールドを入れ直すことです。
ドキュメントの入れ替えにはreplaceOneを使います。(replaceManyはありません。)
第1引数には検索条件を指定し、第2引数には更新内容を指定します。
[Mongoシェル]
1 2 3 4 5 6 7
| > db.col1.replaceOne({name:"生田"}, {firstName:"ほのか", lastName:"田村", age:30}) { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
> db.col1.find() { "_id" : ObjectId("61282d03a951707ba58eecdd"), "name" : "高山", "age" : 20 } { "_id" : ObjectId("61282d0aa951707ba58eecde"), "firstName" : "ほのか", "lastName" : "田村", "age" : 30 } { "_id" : ObjectId("61282d12a951707ba58eecdf"), "name" : "菅井", "age" : 34 }
|
フィールド追加
replaceOneを使えば、フィールドの追加と削除ができますが1フィールドだけ追加したい場合は少々手間です。
updateを使えば、容易にフィールドを追加することができます。
第1引数には検索条件を指定し、第2引数には$setを使い追加フィールドを設定します。
[Mongoシェル]
1 2 3 4 5 6 7
| > db.col1.updateOne({name:"菅井"}, {$set:{height:163, weight:45}}) { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
> db.col1.find() { "_id" : ObjectId("61282d03a951707ba58eecdd"), "name" : "高山", "age" : 20 } { "_id" : ObjectId("61282d0aa951707ba58eecde"), "firstName" : "ほのか", "lastName" : "田村", "age" : 30 } { "_id" : ObjectId("61282d12a951707ba58eecdf"), "name" : "菅井", "age" : 34, "height" : 163, "weight" : 45 }
|
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.replace_one({'name':'生田'}, {'firstName':'ほのか', 'lastName':'田村', 'age':30})
for doc in db1.col1.find(): print(doc)
db1.col1.update_one({'name':'菅井'}, {'$set':{'height':163, 'weight':45}})
for doc in db1.col1.find(): print(doc)
|
次回は、配列への要素追加とオブジェクトへのフィールド追加を行います。