Hoe worden de beheerdershelpers van de replicaset geïmplementeerd?
De rs.*
replica set admin helpers
in de mongo
shell zijn wrappers voor MongoDB-commando's die u vanuit elk stuurprogramma kunt verzenden.
U kunt zien welke opdracht(en) elke shell-helper omhult door te verwijzen naar de MongoDB-documentatie:
rs.initiate()
biedt een wrapper rond dereplSetInitiate
database-opdracht.rs.add()
biedt een wrapper rond een deel van de functionaliteit van dereplSetReconfig
database commando en de corresponderende mongo shell helperrs.reconfig()
.rs.conf()
verpakt dereplSetGetConfig
database-opdracht.
Merk op dat de mongo
shell-helpers kunnen wat extra validatie of manipulatie van configuraties uitvoeren omdat ze bedoeld zijn om te worden gebruikt via de interactieve mongo
schelp.
U kunt bevestigen hoe een van de shell-helpers wordt geïmplementeerd door het commando in de shell aan te roepen zonder haakjes achter te laten, bijvoorbeeld:
> rs.initiate
function (c) { return db._adminCommand({ replSetInitiate: c }); }
Replica set database-opdrachten aanroepen vanuit Node.js
De equivalente logica kan worden geïmplementeerd via de Node.js-stuurprogramma-API met behulp van 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);
});
});
In plaats van de replicasethelpers in Node.js opnieuw te implementeren, kunt u een mongo
aanroepen shell met de --eval
commando om de shell-helper uit te voeren (tip:include --quiet
om onnodige berichten te onderdrukken).
Bijvoorbeeld bellen vanuit uw 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);
});