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 doreplSetInitiatecomando de banco de dados.rs.add()fornece um wrapper em torno de algumas das funcionalidades doreplSetReconfigcomando de banco de dados e o auxiliar de shell mongo correspondenters.reconfig().rs.conf()envolve oreplSetGetConfigcomando 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);
});