我正在尝试使用pymongo将新成员添加到副本集。 当我连接到mongodb shell时,我将执行以下命令:
rs.add( { host: "mongodb3.example.net:27017", priority: 0, votes: 0 } )
我在pymongo中找不到任何类似的命令。
我可以使用以下方法获取当前状态:
client = MongoClient(host)
client.admin.command("replSetGetStatus")
但是仍然有添加新成员吗?
答案 0 :(得分:2)
rs.add()
,rs.reconfig()
和mongo
shell中的类似内容实际上是shell帮助程序,而不是mongod
运行的实际命令。
您可以通过在rs.add
shell中运行mongo
(不带括号)来进行检查。您将在控制台中看到命令的源代码。
从本质上讲,这些助手最终会呼叫db.runCommand()或db.adminCommand()。助手将填充用于调用runCommand()
的必要字段。
使用Python,您可以使用Database.command来模拟那些助手。
例如,这将显示副本集的成员定义:
import pymongo
conn = pymongo.MongoClient()
conf = conn.admin.command({'replSetGetConfig': 1})
print(conf['config']['members'])
rs.add()
基本上是通过修改members
字段的内容对副本集进行的重新配置,因此您需要执行以下操作:
import pymongo
conn = pymongo.MongoClient()
conf = conn.admin.command({'replSetGetConfig': 1})
conf['config']['members'].append({
'_id': 3,
'host': 'localhost:27020',
'hidden': True,
'priority': 0})
conf['config']['version'] += 1 # Bump the config version
res = conn.admin.command({'replSetReconfig': conf['config']})
print(res)