MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

MongoDBでユーザー名を変更する方法|update()と$setを使った手順を解説

MongoDBで作成済みのユーザー名(ユーザーID)を変更したい場合、update()メソッドと$set演算子を組み合わせることで実現できます。この記事では、実際のコマンド例とともに、ユーザー名変更の手順をわかりやすく解説します。

ユーザー名を変更する基本構文

ユーザー名の変更は、adminデータベースのsystem.usersコレクションに対してupdate()を実行し、$setで新しいユーザー名を指定します。基本構文は以下の通りです。

db.system.users.update(
  { "user": "古いユーザー名" },
  { $set: { "user": "新しいユーザー名" } }
);

手順1:既存ユーザーの一覧を確認する

まず、現在登録されているユーザーを確認しましょう。adminデータベースに切り替えてから、db.getUsers()を実行します。

> use admin;
switched to db admin

> db.getUsers();

実行すると、以下のようにユーザー情報の一覧が出力されます。

[
    {
        "_id" : "admin.Chris",
        "user" : "Chris",
        "db" : "admin",
        "roles" : [
            {
                "role" : "readWrite",
                "db" : "test"
            }
        ],
        "mechanisms" : [
            "SCRAM-SHA-1",
            "SCRAM-SHA-256"
        ]
    },
    {
        "_id" : "admin.John",
        "user" : "John",
        "db" : "admin",
        "roles" : [
            {
                "role" : "userAdminAnyDatabase",
                "db" : "admin"
            }
        ],
        "mechanisms" : [
            "SCRAM-SHA-1",
            "SCRAM-SHA-256"
        ]
    },
    {
        "_id" : "admin.Robert",
        "user" : "Robert",
        "db" : "admin",
        "roles" : [
            {
                "role" : "readWrite",
                "db" : "sample"
            }
        ],
        "mechanisms" : [
            "SCRAM-SHA-1",
            "SCRAM-SHA-256"
        ]
    }
]

ここでは「Chris」「John」「Robert」という3人のユーザーが登録されていることが確認できます。

手順2:ユーザー名を変更する

それでは、ユーザー名「John」を「Larry」に変更してみましょう。先ほどの構文に従って、以下のコマンドを実行します。

> db.system.users.update(
  { "user": "John" },
  { $set: { "user": "Larry" } }
);
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

"nModified" : 1と表示されていれば、ドキュメントが正常に更新されています。

手順3:変更結果を確認する

新しいユーザー名「Larry」でユーザーが取得できるか、db.getUser()を使って検証します。

> db.getUser('Larry');

実行結果は以下の通りです。

{
    "_id" : "admin.John",
    "user" : "Larry",
    "db" : "admin",
    "roles" : [
        {
            "role" : "userAdminAnyDatabase",
            "db" : "admin"
        }
    ],
    "mechanisms" : [
        "SCRAM-SHA-1",
        "SCRAM-SHA-256"
    ]
}

「user」フィールドが「Larry」に更新されていることがわかります。なお、_idは「admin.John」のままになっている点に注意してください。この方法ではuserフィールドのみが書き換えられ、_idは元の値が保持されます。

旧ユーザー名でアクセスするとどうなる?

次に、変更前の旧ユーザー名「John」でユーザーを取得しようとすると、該当するユーザーは存在しないためnullが返されます。

> db.getUser('John');

実行結果:

null

これで、ユーザー名の変更が正しく完了したことが確認できました。

補足:最新バージョンでの注意点

上記のsystem.usersコレクションへの直接更新は動作しますが、内部コレクションを直接操作するため、運用環境では推奨されない場合があります。MongoDBの公式には、ユーザー情報の変更にはdb.updateUser()db.changeUserPassword()などの専用コマンドを使用することが推奨されています。ただし、これらの標準コマンドではユーザー名そのものを変更できないため、ユーザー名の変更が必要なケースでは本記事のような方法、あるいは「新規ユーザーを作成して権限を引き継ぎ、旧ユーザーをdropUser()で削除する」方法も検討してください。

  1. MongoDBですべてのドキュメントのフィールド名を一括変更する方法【$rename演算子の使い方】

    MongoDBですべてのドキュメントのフィールド名を変更するには?MongoDBでコレクション内のすべてのドキュメントに含まれる特定のフィールドの名前を一括で変更するには、$rename演算子を使用します。基本の構文は以下のとおりです。db.yourCollectionName.update({}, {$rename:{yourOldFieldName:yourNewFieldName}}, false, true);第4引数にtrueを指定すると、複数ドキュメントへの更新(multi)が有効になり、条件に一致した全ドキュメントが更新対象となります。補足:最近のバージョンではupdateMan

  2. MongoDBでコンソールをクリアする2つの方法|ショートカット「Ctrl + L」とコマンド「cls」の使い方

    MongoDBのシェル(mongo / mongosh)を使っていると、実行したクエリや結果がどんどん積み重なり、画面が見づらくなることがあります。そんなときに便利なのがコンソールのクリア機能です。MongoDBでは、以下の2つの方法でコンソールをクリアできます。 方法1:キーボードショートカット「Ctrl + L」を使う 最も手軽なのが、キーボードショートカットを使う方法です。次のキーを押すだけで、即座にコンソールをクリアできます。 Ctrl + L このキーを押すと、それまで表示されていたログや実行結果がすべて消え、まっさらな状態になります。Linuxのターミナルなどと同じ操作感なので、