MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Posso chiamare rs.initiate() e rs.Add() da node.js usando il driver MongoDb?

Come vengono implementati gli assistenti amministrativi del set di repliche?

Il rs.* assistenti dell'amministratore del set di repliche nel mongo shell sono wrapper per i comandi MongoDB che puoi inviare da qualsiasi driver.

Puoi vedere quali comandi esegue il wrapping di ciascun helper della shell facendo riferimento alla documentazione di MongoDB:

Nota che il mongo gli helper della shell possono fare qualche ulteriore convalida o manipolazione delle configurazioni poiché sono destinate ad essere utilizzate tramite l'interattivo mongo guscio.

Puoi confermare come viene implementato uno qualsiasi degli helper della shell invocando il comando nella shell senza parentesi finali, ad esempio:

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

Richiamare i comandi del database del set di repliche da Node.js

La logica equivalente può essere implementata tramite l'API del driver Node.js utilizzando 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);
  });
});

Invece di reimplementare gli helper del set di repliche in Node.js, puoi invocare un mongo shell con --eval comando per eseguire l'helper della shell (suggerimento:include --quiet per eliminare i messaggi non necessari).

Ad esempio, chiamando dall'app 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);
});