MongoDBでは、updateとinsertを合わせた処理としてupsertという処理ができます。
検索条件に一致した場合はupdateを行い、一致しない場合はinsertを行います。
サンプルデータ
次のようなデータをcol1コレクションに設定します。
[Mongoシェル]
1 | > db.col1.insertOne({name:"白石", age:29}) |
upsertで更新
updateOne、updateManyの第3引数に{upsert:true}を指定すると、upsert処理が実行できます。
まずは、upsert処理でデータを更新してみます。
[Mongoシェル]
1 | > db.col1.updateOne({name:"白石"}, {$set:{sex:"女"}}, {upsert:true}) |
検索条件に合致するドキュメントがあったので、そのデータにsexフィールドが追加されました。
upsertで追加
次に、upsert処理でデータを追加してみます。
[Mongoシェル]
1 | > db.col1.updateOne({name:"高山"}, {$set:{sex:"男"}}, {upsert:true}) |
nameが”高山”のドキュメントがなかったので、新しいドキュメントが追加されました。
upsertで追加されるデータは、検索条件と更新内容に指定したフィールドのみとなります。
Pythonで操作
上記の更新処理をPythonで行うと、次のようになります。
(upsertの指定の仕方にご注意ください。)
[ソースコード]
1 | import pymongo |
次回は、ドキュメントの削除を行います。