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

本文介绍了我可以使用 MongoDb 驱动程序从 node.js 调用 rs.initiate() 和 rs.Add() 吗?的处理方法,对大家解决问题具有一定的参考价值

问题描述

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

上面的设置并不是很重要,归结起来就是我需要能够调用 mongo 副本集命令(例如 rs.initiate()rs.add('anotherserver')rs.conf()rs.reconfig() 等)来自一个节点.js 应用程序.

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

更新:我能够让它工作,并且已经将 sidecar 开源供其他人使用.

解决方案

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

rs.* 副本集管理助手mongo shell 中的 是 MongoDB 命令的包装器,您可以从任何驱动程序发送这些命令.

您可以通过参考 MongoDB 文档查看每个 shell 帮助程序包含哪些命令:

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

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

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

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

可以使用 command():

//rs.initiate() 的粗略等效var MongoClient = require('mongodb').MongoClient;MongoClient.connect('mongodb://localhost:27017/test', function(err, db) {//使用 admin 数据库执行命令var adminDb = db.admin();//默认副本集 confvar conf = {};adminDb.command({replSetInitiate: conf}, function(err, info) {控制台日志(信息);});});

<块引用>

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

与其在 Node.js 中重新实现副本集助手,您可以使用 --eval 命令调用 mongo shell 来运行 shell 助手(提示:包括--quiet 以抑制不必要的消息).

例如,从您的 Node 应用程序调用:

var exec = require('child_process').exec;var rsAdmin = exec('mongo --eval "var res = rs.initiate(); printjson(res)" --quiet', function (error, stdout, stderr) {//输出在标准输出中控制台日志(标准输出);});

I'm looking to automate the process of setting up a MongoDb replica set via a sidecar when using Docker and Kubernetes.

The above setup isn't terribly important, what it boils down to is that I need to be able to call the mongo replica set commands (e.g. rs.initiate(), rs.add('anotherserver'), rs.conf(), rs.reconfig(), etc) from a node.js application.

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.

UPDATE: I was able to get this working and have made the sidecar open source for others to use.

解决方案

How are the replica set admin helpers implemented?

The rs.* replica set admin helpers in the mongo shell are wrappers for MongoDB commands which you can send from any driver.

You can see which command(s) each shell helper wraps by referring to the MongoDB documentation:

Note that the mongo shell helpers may do some extra validation or manipulation of configs as they are intended to be used via the interactive mongo shell.

You can confirm how any of the shell helpers are implemented by invoking the command in the shell without trailing parentheses, eg:

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

Calling replica set database commands from Node.js

The equivalent logic can be implemented via the Node.js driver API using 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.

Rather than reimplementing the replica set helpers in Node.js, you could invoke a mongo shell with the --eval command to run the shell helper (tip: include --quiet to suppress unnecessary messages).

For example, calling from your 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);
});

这篇关于我可以使用 MongoDb 驱动程序从 node.js 调用 rs.initiate() 和 rs.Add() 吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,WP2

admin_action_{$_REQUEST[‘action’]}

do_action( "admin_action_{$_REQUEST[‘action’]}" )动作钩子::在发送“Action”请求变量时激发。Action Hook: Fires when an ‘action’ request variable is sent.目录锚点:#说明#源码说明(Description)钩子名称的动态部分$_REQUEST['action']引用从GET或POST请求派生的操作。源码(Source)更新版本源码位置使用被使用2.6.0 wp-admin/admin.php:...

日期:2020-09-02 17:44:16 浏览:1173

admin_footer-{$GLOBALS[‘hook_suffix’]}

do_action( "admin_footer-{$GLOBALS[‘hook_suffix’]}", string $hook_suffix )操作挂钩:在默认页脚脚本之后打印脚本或数据。Action Hook: Print scripts or data after the default footer scripts.目录锚点:#说明#参数#源码说明(Description)钩子名的动态部分,$GLOBALS['hook_suffix']引用当前页的全局钩子后缀。参数(Parameters)参数类...

日期:2020-09-02 17:44:20 浏览:1071

customize_save_{$this->id_data[‘base’]}

do_action( "customize_save_{$this-&gt;id_data[‘base’]}", WP_Customize_Setting $this )动作钩子::在调用WP_Customize_Setting::save()方法时激发。Action Hook: Fires when the WP_Customize_Setting::save() method is called.目录锚点:#说明#参数#源码说明(Description)钩子名称的动态部分,$this->id_data...

日期:2020-08-15 15:47:24 浏览:808

customize_value_{$this->id_data[‘base’]}

apply_filters( "customize_value_{$this-&gt;id_data[‘base’]}", mixed $default )过滤器::过滤未作为主题模式或选项处理的自定义设置值。Filter Hook: Filter a Customize setting value not handled as a theme_mod or option.目录锚点:#说明#参数#源码说明(Description)钩子名称的动态部分,$this->id_date['base'],指的是设置...

日期:2020-08-15 15:47:24 浏览:900

get_comment_author_url

过滤钩子:过滤评论作者的URL。Filter Hook: Filters the comment author’s URL.目录锚点:#源码源码(Source)更新版本源码位置使用被使用 wp-includes/comment-template.php:32610...

日期:2020-08-10 23:06:14 浏览:930

network_admin_edit_{$_GET[‘action’]}

do_action( "network_admin_edit_{$_GET[‘action’]}" )操作挂钩:启动请求的处理程序操作。Action Hook: Fires the requested handler action.目录锚点:#说明#源码说明(Description)钩子名称的动态部分$u GET['action']引用请求的操作的名称。源码(Source)更新版本源码位置使用被使用3.1.0 wp-admin/network/edit.php:3600...

日期:2020-08-02 09:56:09 浏览:877

network_sites_updated_message_{$_GET[‘updated’]}

apply_filters( "network_sites_updated_message_{$_GET[‘updated’]}", string $msg )筛选器挂钩:在网络管理中筛选特定的非默认站点更新消息。Filter Hook: Filters a specific, non-default site-updated message in the Network admin.目录锚点:#说明#参数#源码说明(Description)钩子名称的动态部分$_GET['updated']引用了非默认的...

日期:2020-08-02 09:56:03 浏览:865

pre_wp_is_site_initialized

过滤器::过滤在访问数据库之前是否初始化站点的检查。Filter Hook: Filters the check for whether a site is initialized before the database is accessed.目录锚点:#源码源码(Source)更新版本源码位置使用被使用 wp-includes/ms-site.php:93910...

日期:2020-07-29 10:15:38 浏览:834

WordPress 的SEO 教学:如何在网站中加入关键字(Meta Keywords)与Meta 描述(Meta Description)?

你想在WordPress 中添加关键字和meta 描述吗?关键字和meta 描述使你能够提高网站的SEO。在本文中,我们将向你展示如何在WordPress 中正确添加关键字和meta 描述。为什么要在WordPress 中添加关键字和Meta 描述?关键字和说明让搜寻引擎更了解您的帖子和页面的内容。关键词是人们寻找您发布的内容时,可能会搜索的重要词语或片语。而Meta Description则是对你的页面和文章的简要描述。如果你想要了解更多关于中继标签的资讯,可以参考Google的说明。Meta 关键字和描...

日期:2020-10-03 21:18:25 浏览:1734

谷歌的SEO是什么

SEO (Search Engine Optimization)中文是搜寻引擎最佳化,意思近于「关键字自然排序」、「网站排名优化」。简言之,SEO是以搜索引擎(如Google、Bing)为曝光媒体的行销手法。例如搜寻「wordpress教学」,会看到本站的「WordPress教学:12个课程…」排行Google第一:关键字:wordpress教学、wordpress课程…若搜寻「网站架设」,则会看到另一个网页排名第1:关键字:网站架设、架站…以上两个网页,每月从搜寻引擎导入自然流量,达2万4千:每月「有机搜...

日期:2020-10-30 17:23:57 浏览:1309