MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Posso chamar rs.initiate() e rs.Add() de node.js usando o driver MongoDb?

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:

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);
});