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:
rs.initiate()stellt einen Wrapper umreplSetInitiatebereit Datenbankbefehl.rs.add()bietet einen Wrapper um einige der Funktionen vonreplSetReconfigdatabase-Befehl und den entsprechenden Mongo-Shell-Helferrs.reconfig().rs.conf()umschließtreplSetGetConfigDatenbankbefehl.
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);
});