読者です 読者をやめる 読者になる 読者になる

MongoDBの$renameで遊ぶ

あるドキュメントでMapを使ってたんですが、ちょっとキー名を変更したくなったのでキー名を変更する方法をドキュメントで探してみました。

Modify Documents — MongoDB Manual 2.4.8

「$rename」!それっぽい!
フィールド名は変更できそうだけど果たしてMapのキーも変更できるのか。
とりあえずテストデータを作成します。

> db.table02.save({name:"hoge",map:{"1":"piyo","2":"fuga"}});
> db.table02.find()                                          
{ "_id" : ObjectId("4dff4df130d500ba704d8616"), "name" : "hoge", "map" : { "1" : "piyo", "2" : "fuga" } }

ためしにDotNotationを使ってmapのキー「2」を「3」に変更してみます。

> db.table02.update({},{$rename:{"map.2":"map.3"}},false,true);
> db.table02.find()                                            
{ "_id" : ObjectId("4dff4df130d500ba704d8616"), "map" : { "1" : "piyo", "3" : "fuga" }, "name" : "hoge" }

できた…!


ついでなので色々遊んでみます。
Mapの要素を外に出すこととかできるんでしょうか。
それでもMongoDBなら…MongoDBならきっとなんとかしてくれる…!!

> db.table02.update({},{$rename:{"map.3":"name2"}},false,true);
> db.table02.find()                                            
{ "_id" : ObjectId("4dff4df130d500ba704d8616"), "map" : { "1" : "piyo" }, "name" : "hoge", "name2" : "fuga" }

おおすげえできた。
逆も試してみます。

> db.table02.update({},{$rename:{"name2":"map.2"}},false,true);
> db.table02.find()                                            
{ "_id" : ObjectId("4dff4df130d500ba704d8616"), "map" : { "1" : "piyo", "2" : "fuga" }, "name" : "hoge" }

MongoDBかっこいい。抱いて。


既にあるMapのキーに変更とかしたらどうなるんでしょうか。
エラー吐くのかな。でもMongoDBさんだからな…。

> db.table02.update({},{$rename:{"name":"map.2"}},false,true); 
> db.table02.find()                                           
{ "_id" : ObjectId("4dff4df130d500ba704d8616"), "map" : { "1" : "piyo", "2" : "hoge" } }

流石MongoDBだなんともないぜ。
なんのエラーも無く上書いてくれました。こわい。


あんまりやらない気がしますが覚えておくといいことがあるかもしれない。あるといいな。

スポンサーリンク