2017-02-14 71 views
-1

我有一些複雜的文檔存儲在Mongo中。我想獲得我收藏中所有級別存儲的值的總結。因此,例如,我想在集合上構建統計信息。一個典型的文檔可能看起來像:自動遍歷MongoDB中的文檔

{"field": {"nestedfield": value}, "field2": {"nestedfield": value1}} 

這樣的想法是,如果我的文件看起來像這樣,我可以自動轉換到具有列表對應於「field""nestedfield"[value1, value1, value1]"field2", "nestedfield"[value, value, value]

問題是有這麼多的頂級鍵和嵌套可能是任意的。

回答

0

我無法輕鬆找到一種方式在Mongo本身,所以我決定在文檔級別,即在字典級別我寫了下面的遞歸例程擴展數據結構和扁平:

def extract(parent, key_str, storage): 

    if not isinstance(parent, list) and not isinstance(parent, dict): # value 
     storage[key_str] = parent 
    elif isinstance(parent, dict): 
     for k in parent.keys(): # dict 
      print k 
      extract(parent[k], key_str+"_"+str(k), storage) 
    elif isinstance(parent, list): 
     for i, j in enumerate(parent): # list 
      print i, j 
      extract(j, key_str+"_"+str(i), storage) 

所以它被稱爲如下:

for a in db.collection.find(): 
     storage = {} 
     extract(a, "head", storage)