2015-07-19 2 views
0

Цель: я хотел вставить более одного значения в один документ.Вставить вложенное значение в mongodb с помощью python

Ниже приведен пример программы, были мне нужно вставить значение документа коллекции 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

Вы, кажется, говорите о «списке» «списков», который вы хотите преобразовать в «список» «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) 

Не уверен, что " индексов ", которые предназначены для вас, кроме поиска текущих значений" Attachment ". Но это добавит новый документ для каждого «messsage» и поместит все «вложения» в массив этого документа, соответствующий вашей новой структуре dict.

+0

Если у меня есть несколько значений в стеке, это сработает? После нахождения вложения точно по электронной почте 153, mongodb получает обновление – jOSe

+0

Я объявил переменную 'mapped =" "' выше, если условие. Теперь он работает и вставляет значение в monogdb, как и ожидалось. – jOSe

+0

@jOSe Не забудьте пометить как [Принято] (http://stackoverflow.com/help/accepted-answer), чтобы люди знали, что это решило вашу проблему. Вам также не нужно «отображать» вне контекста, где вы фактически ничего не добавляете в «Attachment» of post. Вот почему я сделал это. Вы просто следовали примеру не так. Я никогда не собирался «печатать» это из этого контекста, поэтому это не ошибка. Это было намеренно. –

Смежные вопросы