MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Kann ich rs.initiate() und rs.Add() von node.js mit dem MongoDb-Treiber aufrufen?

Wie werden die Replikat-Set-Admin-Hilfsprogramme implementiert?

Der rs.* Replikat-Set-Admin-Helfer im mongo Shell sind Wrapper für MongoDB-Befehle, die Sie von jedem Treiber senden können.

Sie können sehen, welche(n) Befehl(e) jeder Shell-Helfer umschließt, indem Sie auf die MongoDB-Dokumentation verweisen:

Beachten Sie, dass der mongo Shell-Helfer können einige zusätzliche Validierungen oder Manipulationen von Konfigurationen vornehmen, da sie dazu bestimmt sind, über das interaktive mongo verwendet zu werden Schale.

Sie können überprüfen, wie die Shell-Helfer implementiert sind, indem Sie den Befehl in der Shell ohne abschließende Klammern aufrufen, zB:

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

Aufrufen von Replikatsatz-Datenbankbefehlen von Node.js

Die entsprechende Logik kann über die Node.js-Treiber-API mit 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);
  });
});

Anstatt die Replica Set Helper in Node.js neu zu implementieren, könnten Sie einen mongo aufrufen Shell mit --eval Befehl zum Ausführen des Shell-Hilfsprogramms (Tipp:schließen Sie --quiet ein um unnötige Meldungen zu unterdrücken).

Beispiel:Anruf von Ihrer Node-App aus:

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