تجمع بواسطة مفاتيح كائن متداخلة في 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
للحصول على عدد من النقاط لكل أغنية في المصفوفة؟
المحلول
ويبدو أن لديك الخيار الوحيد هو أن تفعل هذا في التعليمات البرمجية بايثون الخاصة بك:
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
.
لا تنتمي إلى StackOverflow