MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Question d'agrégation MongoDB Map/Reduce Array

  1. Le "chunking" vient de votre code :le paramètre values ​​de votre fonction reduce peut contenir soit {time:<timestamp>,value:<value>} émis par votre fonction de carte, ou {time:[<timestamps>],value:[<values]} renvoyé d'un appel précédent à votre fonction reduce.

  2. Je ne sais pas si cela se produira en pratique, mais cela peut arriver en théorie.

  3. Demandez simplement à votre fonction map d'émettre le même type d'objets que votre fonction reduce renvoie, c'est-à-dire emit(<id>, {time: [ts], value: [P[1]]}) , et modifiez votre fonction de réduction en conséquence, c'est-à-dire Array.push.apply(result.time, V.time) et de même pour result.value .

    En fait, je ne comprends pas pourquoi vous n'utilisez pas un tableau de paires temps/valeur, au lieu d'une paire de tableaux, c'est-à-dire emit(<id>, { pairs: [ {time: ts, value: P[1] ] }) ou emit(<id>, { pairs: [ [ts, P[1]] ] }) dans la fonction map, et Array.push.apply(result.pairs, V.pairs) dans la fonction de réduction. De cette façon, vous n'aurez même pas besoin de la fonction finalize (sauf peut-être pour "déballer" le tableau des paires propriété :parce que la fonction reduce ne peut pas renvoyer un tableau, vous devez l'envelopper de cette façon dans un objet)