我有几个mongo数据库(一些填充了集合和文档,有些是空的),我正在尝试解析它们并为内容创建一个图形。我打算为每个数据库,每个集合和集合中的每个键创建节点,并从每个键为值创建节点(因此跳过页面)。这是我获取图表的代码。
for db in dbs:
G.add_node(db)
for col in c[db].collection_names():
G.add_node(col)
G.add_edge(db, col, weight = 0.9)
for page in c[db][col].find():
if (u'_id' in page.viewvalues()):
pprint.pprint(page)
G.add_node(page[u'_id'])
G.add_edge(col, page[u'_id'], weight = 0.4)
for key, value in page.items():
G.add_node(key)
G.add_edge(col, key, weight = 0.1)
G.add_node(value)
G.add_edge(key,value)
我的问题是我从未传递if语句if (u'_id' in page.viewvalues()):
我知道我正在获取页面(如果我在if语句之前打印页面,我会得到几千页,但if语句总是错误的。我在访问find()
查询返回的字典时做错了吗?谢谢。
编辑:
我应该提一下,当我做这样的事情时
for i in page:
而不是if语句它有效,然后打破说TypeError: unhashable type: 'dict'
,我认为这是在它打到一个空页面或当find()
没有返回任何页面时。
答案 0 :(得分:1)
这对我有用:
import pymongo
c = pymongo.Connection()
dbs = c.database_names()
for db in dbs:
for col in c[db].collection_names():
for page in c[db][col].find():
if '_id' in page:
for key, value in page.iteritems():
print key, value
在迭代pymongo游标(由find()
返回)时,你总是得到一本字典。因此,您只需检查字典中是否有_id
键。
顺便说一句,您可以通过向fields
提供find()
参数来指定要在结果中查看的字段。