MongoDBでコレクション名を変更

ちょっとわけあってコレクション名を変更してみたくなったので。
renameCollection — MongoDB Manual 2.4.8


なんかすごい簡単にできそう。
やってみる。

> show collections                               
testCol01
testCol02
> db.testCol01.renameCollection("col01");
{ "ok" : 1 } 
> show collections                               
col01
testCol02

かんたん!
もういっこも変更するよ!

> db.testCol02.renameCollection("col02");
{
        "assertion" : "You can't rename a sharded collection",
        "assertionCode" : 13138,
        "errmsg" : "db assertion failure",
        "ok" : 0
}

!?


どうやらShardingしてるコレクションの名前は変更できないみたい。
dumpしてrestoreみたいな方法しかないんだろうか…。
滅多にやる操作じゃないけどちょっと不便。


ついでなんで既にあるコレクション名に変更しようとしたらどうなるのか試してみる。

> db.col01.renameCollection("testCol02");
{
        "errmsg" : "exception: target namespace exists",
        "code" : 10027,
        "ok" : 0
}

エラーになった。しれっと上書きとかされたらどうしようかと思った。
存在しないコレクションを操作しようとした場合は以下のようなかんじ。

{
        "errmsg" : "exception: source namespace does not exist",
        "code" : 10026,
        "ok" : 0
}

うむ。