Como os auxiliares de administração do conjunto de réplicas são implementados?
O
rs.*
auxiliares de administração do conjunto de réplicas
no mongo
shell são wrappers para comandos do MongoDB que você pode enviar de qualquer driver. Você pode ver quais comandos cada shell helper envolve consultando a documentação do MongoDB:
rs.initiate()
fornece um wrapper em torno doreplSetInitiate
comando de banco de dados.rs.add()
fornece um wrapper em torno de algumas das funcionalidades doreplSetReconfig
comando de banco de dados e o auxiliar de shell mongo correspondenters.reconfig()
.rs.conf()
envolve oreplSetGetConfig
comando de banco de dados.
Observe que o
mongo
os ajudantes do shell podem fazer alguma validação extra ou manipulação de configurações, pois elas devem ser usadas através do mongo
interativo Concha. Você pode confirmar como qualquer um dos auxiliares do shell é implementado invocando o comando no shell sem parênteses à direita, por exemplo:
> rs.initiate
function (c) { return db._adminCommand({ replSetInitiate: c }); }
Chamando comandos de banco de dados de conjunto de réplicas do Node.js
A lógica equivalente pode ser implementada por meio da API do driver Node.js usando
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);
});
});
Em vez de reimplementar os auxiliares do conjunto de réplicas no Node.js, você pode invocar um
mongo
shell com o --eval
comando para executar o shell helper (dica:inclua --quiet
para suprimir mensagens desnecessárias). Por exemplo, chamando do seu aplicativo Node:
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);
});