我可以使用MongoDb驱动程序从node.js调用rs.initiate()和rs.Add()吗?
我希望在使用Docker和Kubernetes时,通过侧车自动设置MongoDb副本集 上述设置并不十分重要,归根结底,我需要能够从node.js应用程序调用mongo副本集命令(例如我可以使用MongoDb驱动程序从node.js调用rs.initiate()和rs.Add()吗?,node.js,mongodb,docker,kubernetes,Node.js,Mongodb,Docker,Kubernetes,我希望在使用Docker和Kubernetes时,通过侧车自动设置MongoDb副本集 上述设置并不十分重要,归根结底,我需要能够从node.js应用程序调用mongo副本集命令(例如rs.initiate(),rs.add('anotherserver'),rs.conf(),rs.reconfig(),等等) 注意:它不必来自节点应用程序,如果有人知道另一种方法来完成同样的事情,请分享您的想法 更新:我能够让这项工作正常进行,并使sidecar开源供其他人使用 副本集管理帮助程序是如何
rs.initiate()
,rs.add('anotherserver')
,rs.conf()
,rs.reconfig()
,等等)
注意:它不必来自节点应用程序,如果有人知道另一种方法来完成同样的事情,请分享您的想法
更新:我能够让这项工作正常进行,并使sidecar开源供其他人使用
mongo
shell中的是MongoDB命令的包装器,您可以从任何驱动程序发送这些命令
通过参考MongoDB文档,您可以看到每个shell helper包装了哪些命令:
- 提供数据库命令的包装器
- 为数据库命令的某些功能和相应的mongo shell helper
提供包装rs.reconfig()
- 包装数据库命令
mongo
shell帮助程序可能会对配置执行一些额外的验证或操作,因为它们将通过交互式mongo
shell使用
您可以通过调用shell中的命令(不带尾随括号)来确认任何shell帮助程序的实现方式,例如:
> rs.initiate
function (c) { return db._adminCommand({ replSetInitiate: c }); }
从Node.js调用副本集数据库命令
等效逻辑可通过Node.js驱动程序API实现,使用:
注意:它不必来自节点应用程序,如果有人知道另一种方法来完成同样的事情,请分享您的想法
您可以使用--eval
命令调用mongo
shell来运行shell帮助程序,而不是在Node.js中重新实现副本集帮助程序(提示:包括--quiet
以抑制不必要的消息)
例如,从节点应用程序调用:
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谢谢@Stennie,实际上我偶然发现了你关于这个话题的另一个答案,并且正在实施中。。。工作就像一种享受。敬请期待!谢谢@Stennie,如果您感兴趣,请查看我的问题编辑以了解更多信息。非常有用,我希望我能给您5张赞成票!
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);
});