MongoDB(15) - 更新編(ドキュメント入れ替え・フィールド追加)

今回は、ドキュメントの入れ替えとフィールドの追加を行います。

サンプルデータ

次のようなデータを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

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

# データベースの取得
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)

次回は、配列への要素追加とオブジェクトへのフィールド追加を行います。