2011-05-10 3 views
0

J'essaie de développer un moteur de génération de rapports générique pour un système MongoDB qui regroupera des informations provenant d'un ensemble de documents. Je ne connaîtrai pas la structure des documents avant l'exécution de la requête.MongoDB MapReduce Stats Engine

par exemple. Un ensemble de documents pourrait ressembler à ceci:

{"drink": "Tea","accompaniments": ["Biscuits","Crisps"]} 
{"drink": "Tea","accompaniments": ["Biscuits"]} 
{"drink": "Coffee","accompaniments": ["Biscuits","Crisps"]} 
{"drink": "Coffee","accompaniments": ["Nuts","Biscuits"]} 
{"drink": "Beer","accompaniments": ["Nuts","Crisps"]} 
{"drink": "Beer","accompaniments": ["Nuts"]} 
{"drink": "Beer","accompaniments": ["Crisps"]} 

Ici, je besoin de résultats tels que:

{drink:{Tea:2,Coffee:2,Beer:3},accompaniments:{biscuits:4,Crisps:4,Nuts:3}} 

Une autre série de documents pourrait ressembler à ceci:

{"favcolor": "Red","shapes": ["Square","Circle"]} 
{"favcolor": "Red","shapes": ["Square"]} 
{"favcolor": "Green","shapes": ["Circle"]} 

Il peut y avoir une nombre de formats de document différents. Par conséquent, je ne peux pas 'coder en dur' les fonctions de réduction de la carte avec des clés nommées. Notez également que j'ai besoin d'extraire des informations de tableaux et/ou de documents imbriqués - je contrôle la façon dont les documents sont construits, donc, pour utiliser un exemple, je pourrais faire un ensemble approprié de documents imbriqués si nécessaire (dans cet exemple, ils sont construits à partir de cases à cocher à choix multiples).

Quelle serait la fonction de réduction de la carte la plus efficace pour récupérer toutes les statistiques de chaque ensemble de documents? J'espère vraiment qu'il y aura «une» carte-réduire qui sera en mesure d'attraper les données de chaque ensemble. Merci beaucoup.

Répondre

0

Je ne suis pas sûr de mon concept, c'est juste une idée.

Vos deux exemples de jeux de données ont une structure commune. Les deux contiennent des documents avec des propriétés: l'un a une valeur de chaîne, le second est un tableau. Votre map-reduce doit donc parcourir les propriétés du document et vérifier le type de propriété particulière. Agréger ensuite selon le type et le nom de la propriété.

Questions connexes