2017-02-14 5 views
-1

У меня есть сложный документ, хранящийся в Mongo. Я хотел бы получить сводку значений, хранящихся на всех уровнях, которые у меня есть в моей коллекции. Так, например, я хочу построить статистику по коллекции. Типичный документ может выглядеть следующим образом:.Автоматический обход документов в MongoDB

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

Так идея заключается в том, что если мои документы выглядят так, я мог бы автоматически преобразовать в список, который имеет для [value, value, value], соответствующего "field", "nestedfield" и [value1, value1, value1] для "field2", "nestedfield"

Проблема заключается в том, что существует так много клавиш верхнего уровня, и вложенность может быть произвольной.

ответ

0

Я не мог легко найти способ в Mongo Self, поэтому я решил сделать это на уровне документа, то есть на уровне словаря Я написал следующую рекурсивную рутина для расширения структуры данных и придавить:

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) 
Смежные вопросы