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 dereplSetInitiatedatabase-opdracht.rs.add()biedt een wrapper rond een deel van de functionaliteit van dereplSetReconfigdatabase commando en de corresponderende mongo shell helperrs.reconfig().rs.conf()verpakt dereplSetGetConfigdatabase-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);
});