MongoDB(17) - 更新編 (フィールド名の変更)

MongoDBでは、大量のデータを保持することが多いため、どうしてもディスク容量が大きくなる傾向があります。

フィールド名を短くすると、ディスク容量を節約することができます。

というわけで今回は、フィールド名の変更を行います。

サンプルデータ

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

[Mongoシェル]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
> db.col1.insertMany([{name:'白石'},
{name:'平手'},
{name:'松田'}])
{
"acknowledged" : true,
"insertedIds" : [
ObjectId("612ad81fd1f2105c574196f1"),
ObjectId("612ad81fd1f2105c574196f2"),
ObjectId("612ad81fd1f2105c574196f3")
]
}

> db.col1.find()
{ "_id" : ObjectId("612ad81fd1f2105c574196f1"), "name" : "白石" }
{ "_id" : ObjectId("612ad81fd1f2105c574196f2"), "name" : "平手" }
{ "_id" : ObjectId("612ad81fd1f2105c574196f3"), "name" : "松田" }

フィールド名の変更

フィールド名の変更には$renameを使います。

第1引数には検索条件を指定し、第2引数には$rename古いフィールド名:”新しいフィールド名”を設定します。

新旧のフィールド名は、カンマで区切り複数指定することもできます。

[Mongoシェル]

1
2
3
4
5
6
7
> db.col1.updateMany({}, {$rename:{name:"lastName"}})
{ "acknowledged" : true, "matchedCount" : 3, "modifiedCount" : 3 }

> db.col1.find()
{ "_id" : ObjectId("612ad81fd1f2105c574196f1"), "lastName" : "白石" }
{ "_id" : ObjectId("612ad81fd1f2105c574196f2"), "lastName" : "平手" }
{ "_id" : ObjectId("612ad81fd1f2105c574196f3"), "lastName" : "松田" }

nameフィールドをlastNameフィールドに変更することができました。

Pythonで操作

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

[ソースコード]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import pymongo
from pymongo import MongoClient

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

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

# フィールド名の変更
db1.col1.update_many({}, {'$rename':{'name':'lastName'}})

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

次回は、データがない場合は登録データがある場合は更新する処理を行います。