1

我有几个 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()没有返回页面时。

4

1 回答 1

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().

于 2013-05-01T04:43:53.537 回答