node.js - 我可以使用 MongoDb 驱动程序从 node.js 调用 rs.initiate() 和 rs.Add() 吗?

标签 node.js mongodb docker kubernetes

我希望在使用 Docker 和 Kubernetes 时通过 sidecar 自动设置 MongoDb 副本集的过程。

上述设置并不是很重要,归结为我需要能够调用 mongo 副本集命令(例如 rs.initiate()rs.add('anotherserver')rs.conf()rs.reconfig() 等) .js 应用程序。

注意:它不一定来自 Node 应用程序,如果有人知道完成相同事情的另一种方法,请分享您的想法。

更新:我能够让这个工作,并让边车开源供其他人使用。

最佳答案

副本集管理助手是如何实现的?

rs.* replica set admin helpers mongo shell 中是 MongoDB 命令的包装器,您可以从任何驱动程序发送这些命令。

您可以通过引用 MongoDB 文档查看每个 shell 帮助程序包装了哪些命令:

请注意,mongo shell 助手可能会对配置进行一些额外的验证或操作,因为它们旨在通过交互式 mongo shell 使用。

您可以通过在 shell 中调用不带括号的命令来确认任何 shell 助手是如何实现的,例如:

> rs.initiate
function (c) { return db._adminCommand({ replSetInitiate: c }); }

从 Node.js 调用副本集数据库命令

等效的逻辑可以通过 Node.js 驱动 API 使用 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);
  });
});

Note: it doesn't have to be from a node application, if someone knows of another way of getting the same thing done, please share your thoughts.

您可以使用 --eval 命令调用 mongo shell 来运行 shell 助手,而不是在 Node.js 中重新实现副本集助手(提示:包括--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);
});

关于node.js - 我可以使用 MongoDb 驱动程序从 node.js 调用 rs.initiate() 和 rs.Add() 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30041699/

相关文章:

node.js - 如何取消 'pre' 钩子(Hook)中的 Mongoose 查询

docker - 如何查看 Docker 引擎的内存分配?

docker - 如何在没有 nat 表的情况下启动 docker?

基于多个条件的javascript对象过滤器

node.js - 将 Express Routes 与 Google Assistant 意图相匹配

mysql - 服务器 Ajax/http 上的 Nodejs 调用不读取新数据 Mongodb

node.js - 尝试使用 docker 执行 apt-get,导致错误 100

node.js - heroku 上的 Bower 模块缓存

javascript - Node.js + socket.io : app on server not working correctly

MongoDB 添加以变量值命名的新字段