MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Puis-je appeler rs.initiate() et rs.Add() depuis node.js en utilisant le pilote MongoDb ?

Comment les assistants d'administration de l'ensemble de répliques sont-ils implémentés ?

Le rs.* assistants d'administration du jeu de répliques dans le mongo shell sont des wrappers pour les commandes MongoDB que vous pouvez envoyer depuis n'importe quel pilote.

Vous pouvez voir quelle(s) commande(s) chaque assistant shell encapsule en vous référant à la documentation MongoDB :

Notez que le mongo les aides shell peuvent effectuer une validation ou une manipulation supplémentaire des configurations car elles sont destinées à être utilisées via le mongo interactif coque.

Vous pouvez confirmer comment l'un des assistants du shell est implémenté en appelant la commande dans le shell sans parenthèses à la fin, par exemple :

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

Appel des commandes de base de données du jeu de réplicas depuis Node.js

La logique équivalente peut être implémentée via l'API du pilote Node.js en utilisant 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);
  });
});

Plutôt que de réimplémenter les assistants de jeu de répliques dans Node.js, vous pouvez invoquer un mongo shell avec le --eval commande pour exécuter l'assistant shell (astuce :inclure --quiet pour supprimer les messages inutiles).

Par exemple, en appelant depuis votre application 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);
});