2015-07-19 69 views
0

目標:我想在單個文檔中插入多個值。使用python在mongodb中插入嵌套值

下面是一個例子程序,是我需要插入值的MongoDB集合的文檔

for message in mbox: 
    stackf = getattachements(message) 
    if len(stackf) > 0: 
     for i in range(len(stackf)): 
      print stackf[i][0] 
      print stackf[i][1] 
      post = {'sl':i,'From' : message['From'],'To' : message['To'], 'Date' : message['Date'],'Subject' : message['subject'],'Body' : getbody(message),'Attachement' : [{"Originalname" :stackf[i][0],"Exportpath" : stackf[i][1]}]} 
    else: 
      post = {'sl':i,'From' : message['From'],'To' : message['To'], 'Date' : message['Date'],'Subject' : message['subject'],'Body' : getbody(message)} 

但如果「stackf」有任何返回值 - 這個代碼不寫什麼。

+0

需要關於這個問題的更多細節。當'stackf'獲得非空值時,你的兩個打印語句會被執行嗎? – piglei

回答

1

您似乎在討論您想要轉換爲「字典」「列表」的「列表」列表。

所以基本上

listOfList = [[1,2],[3,4],[5,6]] 
map(lambda x: { "OrginalName": x[0], "ExportPath": x[1] }, listOfList) 

產地:

[   
    {'ExportPath': 2, 'OrginalName': 1}, 
    {'ExportPath': 4, 'OrginalName': 3}, 
    {'ExportPath': 6, 'OrginalName': 5} 
] 

所以,你可以用它來構建你的發言,但不嘗試一下如:

for message in mbox: 
    post = { 
     'From' : message['From'], 
     'To' : message['To'], 
     'Date' : message['Date'], 
     'Subject' : message['subject'], 
     'Body' : getbody(message) 
    } 
    stackf = getattachements(message) 
    if len(stackf) > 0: 
     mapped = map(lambda x: { "OrginalName": x[0], "ExportPath": x[1] }, stackf) 
     post['Attachement'] = mapped 

    collection.insert_one(post) 

不知道什麼是「索引「值除了查找當前的」附件「值之外,對您而言意味着什麼。但是,這將爲每個「消息」插入一個新文檔,並將所有「附件」放入與該新文檔結構匹配的文檔數組中。

+0

如果我在堆棧中有多個值,它會起作用嗎?在找到附件完全在電子郵件153後,mongodb得到更新 – jOSe

+0

如果條件,我已經聲明變量'mapped =「」'。現在它工作並按預期將值插入monogdb。 – jOSe

+0

@jOSe不要忘記標記爲[Accepted](http://stackoverflow.com/help/accepted-answer),以便人們知道這解決了您的問題。你也不需要在上下文之外進行「映射」,因爲你並沒有在文章的「Attachement」中添加任何內容。這就是我爲什麼這樣做的原因。你只是以錯誤的方式跟隨了這個例子。我從來沒有打算在此背景下「打印」這個,所以這不是一個錯誤。這是故意的。 –