副本集管理员助手是如何实现的?
该
rs.*副本集管理助手的
mongo外壳是你可以从任何驱动程序发送的MongoDB命令包装。
您可以通过参考MongoDB文档来查看每个shell助手包装了哪些命令:
rs.initiate()
提供围绕replSetInitiate
数据库命令的包装。rs.add()
提供了一些replSetReconfig
数据库命令和相应的mongo shell助手功能的包装rs.reconfig()
。rs.conf()
包装replSetGetConfig
数据库命令。
请注意,
mongoshell助手可能会对配置进行一些额外的验证或操作,因为它们打算通过交互式
mongoshell使用。
您可以通过在外壳程序中调用命令而不用括号括起来来确认如何实现任何外壳程序助手,例如:
> rs.initiatefunction (c) { return db._adminCommand({ replSetInitiate: c }); }从Node.js调用副本集数据库命令
可以使用
command()以下方法通过Node.js驱动程序API来实现等效逻辑:
// 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); });});注意:它不一定来自节点应用程序,如果有人知道完成同一件事的另一种方法,请分享您的想法。
可以
mongo在
--eval命令中调用Shell 来运行Shell Helper ,而不是在Node.js中重新实现副本集Helper
(提示:包括
--quiet以消除不必要的消息)。
例如,从您的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);});


