Come vengono implementati gli assistenti amministrativi del set di repliche?
Il rs.* assistenti dell'amministratore del set di repliche
nel mongo shell sono wrapper per i comandi MongoDB che puoi inviare da qualsiasi driver.
Puoi vedere quali comandi esegue il wrapping di ciascun helper della shell facendo riferimento alla documentazione di MongoDB:
rs.initiate()fornisce un wrapper perreplSetInitiatecomando database.rs.add()fornisce un wrapper attorno ad alcune delle funzionalità direplSetReconfigcomando database e il corrispondente helper della shell mongors.reconfig().rs.conf()avvolgereplSetGetConfigcomando database.
Nota che il mongo gli helper della shell possono fare qualche ulteriore convalida o manipolazione delle configurazioni poiché sono destinate ad essere utilizzate tramite l'interattivo mongo guscio.
Puoi confermare come viene implementato uno qualsiasi degli helper della shell invocando il comando nella shell senza parentesi finali, ad esempio:
> rs.initiate
function (c) { return db._adminCommand({ replSetInitiate: c }); }
Richiamare i comandi del database del set di repliche da Node.js
La logica equivalente può essere implementata tramite l'API del driver Node.js utilizzando 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);
});
});
Invece di reimplementare gli helper del set di repliche in Node.js, puoi invocare un mongo shell con --eval comando per eseguire l'helper della shell (suggerimento:include --quiet per eliminare i messaggi non necessari).
Ad esempio, chiamando dall'app Node:
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);
});