2013-05-01 36 views
1

我有幾個mongo數據庫(一些填充了集合和文檔,有些是空的),我試圖通過它們解析併爲內容創建一個圖表。我正在計劃爲每個數據庫,每個集合以及集合中的每個關鍵點創建節點,並且將每個關鍵點都設置爲該值(以便跳過頁面)。這是我獲取圖形的代碼。PyMongo,圖表

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()返回沒有頁面。

回答

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()來指定要在結果中看到的字段。

+0

當你有一個沒有數據的集合時,這是否正常工作? – 2013-05-01 04:48:43

+0

然後,找到將不會返回。 – alecxe 2013-05-01 04:49:27

+0

你如何檢查? (這是拋出錯誤,說不是我在編輯中提到的字典類型) – 2013-05-01 04:51:19