从 pymongo 获取正确的成员列表

Getting proper list of members from pymongo

我正在尝试使用 pymongo 获取副本集中所有成员的列表。

import pymongo
conn = pymongo.Connection(replicaset='myreplica')
conf = conn.local.system.replset.find_one()
print conf['members']

这似乎适用于我所拥有的一个环境,return如我所料地列出了结果列表。

>>> print conf['members']
[{u'host': u'srvr-01:27017', u'_id': 0}, {u'priority': 0.5, u'host': u'srvr-02:27017', u'_id': 1}, {u'priority': 0.5, u'host': u'srvr-03:27017', u'_id': 2}]
>>>

然而,在另一个环境中,我得到的 returned 是

>>> print conf['members']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'members'
>>> print conf
{u'_id': ObjectId('5483f1963784952946e3e799')}
>>>

我不明白为什么相同的代码会 return 不同的结果。据我所知,环境是彼此的副本。两个环境中都存在相同的副本集。

有人知道为什么我得到的是 OjbectID returned 而不是正确的结果字典吗?谢谢

根据我们的讨论,问题很可能是插入了空记录。我不知道那是怎么来的,但你可以试试这个来只找到那些有成员的记录:

collection.find( { members : { $exists : true } } );