Jak zaimplementowani są pomocnicy administratora zestawu replik?
rs.* pomocników administratora zestawu replik
w mongo shell to wrappery dla poleceń MongoDB, które możesz wysłać z dowolnego sterownika.
Możesz zobaczyć, które polecenia zawija każdy helper powłoki, odwołując się do dokumentacji MongoDB:
rs.initiate()udostępnia opakowanie wokółreplSetInitiatepolecenie bazy danych.rs.add()zapewnia opakowanie wokół niektórych funkcjireplSetReconfigpolecenie bazy danych i odpowiedni pomocnik powłoki mongors.reconfig().rs.conf()opakowujereplSetGetConfigpolecenie bazy danych.
Zauważ, że mongo Pomocnicy powłoki mogą dokonać dodatkowej walidacji lub manipulacji plikami konfiguracyjnymi, ponieważ są przeznaczone do użycia poprzez interaktywne mongo powłoka.
Możesz potwierdzić, jak zaimplementowano którykolwiek z pomocników powłoki, wywołując polecenie w powłoce bez końcowych nawiasów, np.:
> rs.initiate
function (c) { return db._adminCommand({ replSetInitiate: c }); }
Wywoływanie poleceń zestawu replik bazy danych z Node.js
Równoważną logikę można zaimplementować za pomocą interfejsu API sterownika Node.js przy użyciu 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);
});
});
Zamiast ponownie zaimplementować pomocniki zestawu replik w Node.js, możesz wywołać mongo powłoka z --eval polecenie do uruchomienia pomocnika powłoki (wskazówka:include --quiet aby pominąć niepotrzebne wiadomości).
Na przykład dzwoniąc z aplikacji 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);
});