7

我是 mongo 的新手,我正在使用 pymongo。我发现 pymongo 的文档到处都是。

1)我有一个代表集。从 mongo shell,如果我运行下面的命令,我会得到我需要的东西。

sudo mongo 111.111.111.111 --eval "printjson(rs.status())"
MongoDB shell version: 2.2.1
connecting to: 111.111.111.111/test
{
    "set" : "hey",
    "date" : ISODate("2012-11-10T11:47:58Z"),
    "myState" : 1,
    "members" : [
        {
            "_id" : 0,
            "name" : "111.111.111.111:27017",
            "health" : 1,
            "state" : 1,
            "stateStr" : "PRIMARY",
            "uptime" : 69189,
            "optime" : Timestamp(1352478921000, 1),
            "optimeDate" : ISODate("2012-11-09T16:35:21Z"),
            "self" : true
        }
    ],
    "ok" : 1
}

我需要从 pymongo 获取该信息。

1)我连接到主节点。我得到none但根据上述节点是主要的:

c = ReplicaSetConnection("111.111.111.111:27017", replicaSet='heythat')
print c.primary
None

2) 我想运行c.command("status"),但不支持该操作。

那么,我如何使用 pymongo 来返回主目录并以 Python 字典的形式返回状态?

4

1 回答 1

12

rs.status()调用'replSetGetStatus'管理命令,在python中你可以这样做:

conn = ReplicaSetConnection("111.111.111.111:27017", replicaSet='heythat')
conn.admin.command('replSetGetStatus')

Protip:如果你想知道 shell 助手调用什么命令,那么把括号从函数中去掉以查看代码,例如:

heythat:PRIMARY> rs.status
function () {
    return db._adminCommand("replSetGetStatus");
}
于 2012-11-12T12:52:27.790 回答