MongoDBの周辺スクリプトの作成の続き
MongoDB(特に4.0.0のWindows用)の設定関係のファイルを引き続き作っていた。
サンプル作成が異常に面倒である。
今回もファイルサイズが大きすぎて本文に埋め込めなくなってしまった。
環境変数の読み込み用ファイルenv.bat
(cmdのショートカットのリンク先にC:\Windows\System32\cmd.exe /k "C:\mongodb-4.0.0\env.bat"などと設定して使うのも)
@echo off set "PATH=%~dp0;%PATH%" SET PATH=%PATH%;C:\mongodb-4.0.0\bin setlocal enabledelayedexpansion pushd "%~dp0" popd endlocal
MongoDBをスタートするスクリプト mongodb_start.cmd
mongod --config "C:\mongodb-4.0.0\mongod.cfg"
MongoDBをWindowsサービスにするスクリプト mongodb_install_service.cmd
set service_name=MONGODB_TAKEME_APP mongod --install --config "C:\mongodb-4.0.0\mongod.cfg" --serviceName %service_name% --serviceDisplayName "MONGODB FOR TAKEME_APP" --serviceDescription "MongoDB 4.0.0 for TakeMe Applications." net start %service_name%
MongoDBをWindowsサービスから削除する mongodb_remove_service.cmd
set service_name=MONGODB_TAKEME_APP net stop %service_name% mongod --remove --serviceName "MONGODB_TAKEME_APP"
MongoDBの設定ファイル mongod.cfg
ユーザ入れかえ mongodb_change_username.cmd
(username.jsに新しいユーザ名usernameOld.jsに古いユーザ名を入れて実行)
set service_name=MONGODB_TAKEME_APP mongo localhost:27017 Init0.js net stop %service_name% net start %service_name% mongo localhost:27017 Init1.js
管理ユーザで実行しないと使えないけど参考のファイルなど添付しておきます(Search consoleで警告が出たので中止)。
特にユーザ交換スクリプトは以下のようにInit0.jsを実行する。
conn = new Mongo("localhost:27017"); db = conn.getDB("admin"); load('usernameOld.js'); db.auth(username, password); var lstUsers = db.getUsers(); var users = []; for (var i = 0; i < lstUsers.length; i++) { users.push(lstUsers[i].user); } db = conn.getDB('TAKEME_APP'); db.auth(username, password); for (var i = 0; i <users.length; i++) { db.dropUser(users[i]); } db = conn.getDB('admin'); db.auth(username, password); for (var i = 0; i <users.length; i++) { db.dropUser(users[i]); }
設定を行う本体スクリプトInit1.js
conn = new Mongo("localhost:27017"); db = conn.getDB("admin"); load('username.js'); db.createUser( { user: username, pwd: password, roles: [ { "role": "root", "db" : "admin" }, { "role": "userAdmin", "db" : "admin" }, { "role": "hostManager", "db" : "admin" } ] } ); db.auth(username, password); var lstUsers = db.getUsers(); var users = []; for (var i = 0; i < lstUsers.length; i++) { if (lstUsers[i].user !== username) users.push(lstUsers[i].user); } for (var i = 0; i <users.length; i++) { db.dropUser(users[i]); } db = conn.getDB('TAKEME_APP'); for (var i = 0; i < users.length; i++) { db.dropUser(users[i]); } db.createUser( { user: username, pwd: password, roles: [ { "role": "readWrite", "db" : "TAKEME_APP" } ] } );
注意はmongo shellでJavaScriptを実行する場合,conn = new Mongo("localhost:27017"); db = conn.getDB("admin");などを使ってdbを指定してこないといけない。use admin;などでdbが指定できるコンソールと若干異なる。