2009-11-27 3 views
0

Можно ли группировать результаты по ключевому элементу, найденному в массиве объектов в списке?Группировка с помощью вложенных ключей объектов в MongoDB

Например, скажем, у меня есть таблица ответов на опрос (survey_responses), и каждая запись представляет собой один ответ. Один или несколько вопросов в опросе является множественным выбором, так что ответы хранятся могут выглядеть следующим образом:

survey_responses.insert({ 
    'name': "Joe Surveylover", 
    'ip': "127.0.0.1", 
    'favorite_songs_of_2009': [ 
     {'rank': 1, 'points': 5, 'title': "Atlas Sound: Quick Canals"}, 
     {'rank': 2, 'points': 4, 'title': "Here We Go Magic: Fangela"}, 
     {'rank': 3, 'points': 3, 'title': "Girls: Hellhole Ratrace"}, 
     {'rank': 4, 'points': 2, 'title': "Fever Ray: If I Had A Heart"}, 
     {'rank': 5, 'points': 1, 'title': "Bear in Heaven: Lovesick Teenagers"}], 
    'favorite_albums_of_2009': [ 
     # and so on 
    ]}) 

как я могу групповой title из favorite_songs_in_2009, чтобы получить общее количество баллов для каждой песни в массиве ?

ответ

0

Похоже, что единственным вариантом является, чтобы сделать это в вашем собственном коде Python:

song_points = {} 
for response in survey_responses.find(): 
    for song in response['favorite_songs_of_2009']: 
     title = song['title'] 
     song_points[title] = song_points.get(title, 0) + song['points'] 

Вы получите результаты в переменной song_points.

+0

Это более или менее то, к чему я пришел. его, возможно, не самый эффективный, но счет может быть подсчитан с помощью вложенного поля в 'reduce' функции с помощью' doc.field_name.forEach': 'reduce' функция будет выглядеть примерно так: функции (doc, out) { doc.field.forEach (function (item_in_list) { // делать что-то интересное с помощью «item_in_list» } } – Carson

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