sql >> Database teknologi >  >> NoSQL >> MongoDB

Kan jeg kalde rs.initiate() og rs.Add() fra node.js ved hjælp af MongoDb-driveren?

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:

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);
});



  1. kan ikke starte mongo db, initandlisten undtagelse

  2. MongoDB Update array-element (dokument med en nøgle), hvis det findes, ellers push

  3. Bedste måde at repræsentere flersproget database på mongodb

  4. Er der et indlejrbart Java-alternativ til Redis?