レプリカセットの管理ヘルパーはどのように実装されていますか?
rs.*
レプリカセット管理ヘルパー
mongo
で シェルは、任意のドライバーから送信できるMongoDBコマンドのラッパーです。
MongoDBのドキュメントを参照すると、各シェルヘルパーがどのコマンドをラップするかを確認できます。
-
rs.initiate()
replSetInitiate
のラッパーを提供します データベースコマンド。 -
rs.add()
replSetReconfig
の一部の機能のラッパーを提供します データベースコマンドと対応するmongoシェルヘルパーrs.reconfig()
。 -
rs.conf()
replSetGetConfig
をラップします データベースコマンド。
mongo
に注意してください シェルヘルパーは、インタラクティブなmongo
を介して使用することを目的としているため、構成の追加の検証または操作を行う場合があります。 シェル。
かっこを付けずにシェルでコマンドを呼び出すことで、シェルヘルパーがどのように実装されているかを確認できます。例:
> rs.initiate
function (c) { return db._adminCommand({ replSetInitiate: c }); }
Node.jsからレプリカセットデータベースコマンドを呼び出す
同等のロジックは、 command()
:
// Rough equivalent of rs.initiate()
var MongoClient = require('mongodb').MongoClient;
MongoClient.connect('mongodb://localhost:27017/test', function(err, db) {
// Use the admin database for commands
var adminDb = db.admin();
// Default replica set conf
var conf = {};
adminDb.command({replSetInitiate: conf}, function(err, info) {
console.log(info);
});
});
Node.jsでレプリカセットヘルパーを再実装するのではなく、mongo
を呼び出すことができます。 --eval
を使用したシェル シェルヘルパーを実行するコマンド(ヒント:--quiet
を含める 不要なメッセージを抑制します。
たとえば、ノードアプリからの呼び出し:
var exec = require('child_process').exec;
var rsAdmin = exec('mongo --eval "var res = rs.initiate(); printjson(res)" --quiet', function (error, stdout, stderr) {
// output is in stdout
console.log(stdout);
});