2013-04-05 4 views
0

j'ai une collection de documents avec la structure suivante:agrégation sur les sous-documents avec des noms clés inconnus

"_id" : "20130104/activity", 
"hourly" : { 
    "0" : { 
     "activity1" : 25, 
     "activity2" : 10 
    }, 
    "1" : { 
     "activity1" : 25, 
     "activity2" : 10, 
     "activity3" : 5 
    }, 
    "2" : { 
     "activity1" : 25, 
     "activity2" : 10, 
     "activity3" : 5 
    } 
    } 

Je voudrais être en mesure de regrouper ces données pour être en mesure de générer des statistiques mensuelles et quotidiennes comme le document montré ici:

"date" : "20130104", 
"total" : { 
     "activity1" : 75, 
     "activity2" : 30, 
     "activity3" : 10 
      } 

Mon problème est que je ne connais pas les noms clés dans le sous-document horaire à l'avance - ce qui rend l'utilisation du cadre global assez difficile. (ou peut-être que j'ai juste mal compris quelque chose).

Des suggestions?

+0

Il y a un maximum de 24 éléments par array 'hourly'? – sambomartin

+0

Oui. (ce n'est pas un tableau) – Johnny

Répondre

0

map reduce peut être utilisé ici pour calculer les données de rapport, car vous n'avez pas besoin de connaître le nom de la clé. Une autre approche est que nous avons 24 heures sur 24, vous pouvez toujours avoir un document avec une clé de 24 heures et ensuite facilement vous pouvez utiliser le cadre d'agrégation. Même cette approche vous donnera une augmentation de performance aussi et il est courant

+1

Mon document a déjà 24 heures de clés, pourriez-vous donner un court exemple sur la façon d'utiliser le cadre d'agrégation avec ces exemples? – Johnny

Questions connexes