Hvordan implementeres replikasættets administratorhjælpere?
rs.* replika sæt admin hjælpere
i mongo shell er wrappers til MongoDB-kommandoer, som du kan sende fra enhver driver.
Du kan se hvilke kommando(er) hver shell-hjælper ombryder ved at henvise til MongoDB-dokumentationen:
rs.initiate()giver en indpakning omkringreplSetInitiatedatabasekommando.rs.add()giver en indpakning omkring nogle af funktionerne ireplSetReconfigdatabasekommando og den tilsvarende mongo shell-hjælperrs.reconfig().rs.conf()omslutterreplSetGetConfigdatabasekommando.
Bemærk, at mongo shell-hjælpere kan udføre noget ekstra validering eller manipulation af konfigurationer, da de er beregnet til at blive brugt via den interaktive mongo skal.
Du kan bekræfte, hvordan en hvilken som helst af shell-hjælperne er implementeret ved at påkalde kommandoen i shellen uden efterfølgende parenteser, f.eks.:
> rs.initiate
function (c) { return db._adminCommand({ replSetInitiate: c }); }
Kalder replikasæt-databasekommandoer fra Node.js
Den tilsvarende logik kan implementeres via Node.js driver API ved hjælp af 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);
});
});
I stedet for at genimplementere replikasættets hjælpere i Node.js, kan du kalde en mongo skal med --eval kommando for at køre shell-hjælperen (tip:inkludere --quiet for at undertrykke unødvendige beskeder).
For eksempel opkald fra din Node-app:
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);
});