2017-02-14 5 views
-1

Mongoには複雑な文書が格納されています。私は私のコレクションにあるすべてのレベルで保存された値の要約を取得したいと思います。たとえば、コレクションの統計を作成したいとします。典型的な文書は次のようになります。MongoDBでの文書の自動移動

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

だから、アイデアは私の文書はこのように見れば、私は自動[value, value, value]は「field""nestedfield""field2", "nestedfield"ため[value1, value1, value1]に対応するために持っているリストに変換することができることである

多くのトップレベルキーがあり、ネスティングは任意である可能性があります。

答えて

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) 
関連する問題