تجمع بواسطة مفاتيح كائن متداخلة في MongoDB

StackOverflow https://stackoverflow.com/questions/1806705

  •  05-07-2019
  •  | 
  •  

سؤال

هل من الممكن أن نتائج مجموعة عن طريق مفتاح وجدت في مجموعة من الكائنات في القائمة؟

وعلى سبيل المثال، يتيح القول لدي جدول الردود على الاستقصاء (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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top