当前位置: 首页 > 面试题库 >

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

晋奕
2023-03-14
问题内容

我正在寻找使用Docker和Kubernetes时通过边车自动设置MongoDb副本集的过程。

以上的设置是不是非常重要的
,它归结为是,我需要能够调用蒙戈副本集命令(例如rs.initiate()rs.add('anotherserver')rs.conf()rs.reconfig(),等)从一个Node.js应用程式。

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

更新: 我能够使此工作正常进行,并已将sidecar开源供其他人使用。

  • https://github.com/leportlabs/mongo-k8s-sidecar
  • https://registry.hub.docker.com/u/leportlabs/mongo-k8s-sidecar

问题答案:

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

rs.*副本集管理助手的mongo外壳是你可以从任何驱动程序发送的MongoDB命令包装。

您可以通过参考MongoDB文档来查看每个shell助手包装了哪些命令:

  • rs.initiate()提供围绕replSetInitiate数据库命令的包装。
  • rs.add()提供了一些replSetReconfig数据库命令和相应的mongo shell助手功能的包装rs.reconfig()
  • rs.conf()包装replSetGetConfig数据库命令。

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

您可以通过在外壳程序中调用命令而不用括号括起来来确认如何实现任何外壳程序助手,例如:

> rs.initiate
function (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);
});


 类似资料:
  • 我是postgres新手,但我正在尝试调用postgres 11中的过程(新的“过程”不是“函数”),以spring SimpleJDBCall(使用Postgresql-42.2.5 jdbc驱动程序)的形式从java调用。然而,当我执行该过程时,我遇到以下异常: (?)}]; BadSqlGrammarException: CallableStatementCallback;坏SQL语法[{调

  • 我是Postgres11的新手,但正在尝试调用Postgres11中的过程(新的“过程”而不是“函数”),从java作为spring SimpleJDBCCall进行调用(使用PostgresQL-42.2.5jdbc驱动程序)。但是,当我执行该过程时,遇到以下异常: org.springframework.jdbc.badsqlgrammarexception:CallableStatement

  • 我试图使用servlet上的Java驱动程序连接到托管在mlab上的MongoDB数据库。 问题是我得到以下错误: 这样做对吗?我还应该做什么/代替吗?

  • 问题内容: 如何通过 JNI 从Node.js调用Java ?有没有例子? 问题答案: 看起来很棘手。Node.JS在Google Chrome JavaScript引擎V8上运行。您将要做的是创建一个V8 C ++绑定(一个v8 c ++崩溃课程 显示了一个示例),该绑定启动JVM并执行所有JNI处理。 我认为让JavaServer和Node.js通过网络进行通信可能更好(有人写了一个使用Rab

  • 我总是读到MongoDB驱动程序(>2.0)for NodeJS支持承诺。但我找到的仅有的例子是connect()和findOne()函数。虽然它适用于这些,而且我可以得到承诺,但对于aggregate()和find()它不适用。我明白这是因为它们可能会返回游标,但是既然有承诺支持,那些承诺在哪里呢?一定有办法和他们合作。欢迎提供链接、示例或简单解释:) 谢谢你,乔迪。

  • 问题内容: 我想对MongoDB驱动程序作出承诺。我写了以下代码: 您是否知道为什么在调用该方法时为什么没有输出: 问题答案: 手动散布API是很危险的,我建议采取以下措施: 有了Bluebird的承诺,它看起来就像: