sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Puedo llamar a rs.initiate() y rs.Add() desde node.js usando el controlador MongoDb?

¿Cómo se implementan los auxiliares de administración del conjunto de réplicas?

El rs.* auxiliares de administración del conjunto de réplicas en el mongo shell son contenedores para los comandos de MongoDB que puede enviar desde cualquier controlador.

Puede ver qué comando(s) envuelve cada asistente de shell consultando la documentación de MongoDB:

Tenga en cuenta que mongo los ayudantes de shell pueden realizar una validación o manipulación adicional de las configuraciones, ya que están destinadas a ser utilizadas a través del mongo interactivo concha.

Puede confirmar cómo se implementan cualquiera de los ayudantes de shell invocando el comando en el shell sin paréntesis finales, por ejemplo:

> rs.initiate
function (c) { return db._adminCommand({ replSetInitiate: c }); }

Llamar a los comandos de la base de datos del conjunto de réplicas desde Node.js

La lógica equivalente se puede implementar a través de la API del controlador 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);
  });
});

En lugar de volver a implementar los asistentes del conjunto de réplicas en Node.js, podría invocar un mongo shell con el --eval comando para ejecutar el ayudante de shell (consejo:incluya --quiet para suprimir mensajes innecesarios).

Por ejemplo, llamando desde su aplicación 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);
});