使用python

时间:2015-07-19 06:13:53

标签: python mongodb pymongo

目标:我想在一个文档中插入多个值。

以下是一个示例程序,我需要将值插入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"得到任何返回值 - 这段代码没有写任何东西。

1 个答案:

答案 0 :(得分:1)

你似乎在谈论一个"列表" "列表"您希望转换为"列表" " dict"。

所以基本上

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)

不确定"索引"除了查找当前的"附件"值。但是,这将为每个"消息插入一个新文档"并把所有"附件"在与您的新dict结构匹配的文档数组中。