sql >> Base de Datos >  >> NoSQL >> MongoDB

Pregunta de agregación de MongoDB Map/Reduce Array

  1. La "fragmentación" proviene de su código:el parámetro de valores de su función de reducción puede contener {time:<timestamp>,value:<value>} emitido desde su función de mapa, o {time:[<timestamps>],value:[<values]} devuelto de una llamada anterior a su función de reducción.

  2. No sé si sucederá en la práctica, pero puede suceder en teoría.

  3. Simplemente haga que su función map emita el mismo tipo de objetos que devuelve su función reduce, es decir, emit(<id>, {time: [ts], value: [P[1]]}) , y cambie su función de reducción en consecuencia, es decir, Array.push.apply(result.time, V.time) y de manera similar para result.value .

    Bueno, en realidad no entiendo por qué no estás usando una matriz de pares de tiempo/valor, en lugar de un par de matrices, es decir, emit(<id>, { pairs: [ {time: ts, value: P[1] ] }) o emit(<id>, { pairs: [ [ts, P[1]] ] }) en la función de mapa, y Array.push.apply(result.pairs, V.pairs) en la función de reducción. De esa manera, ni siquiera necesitará la función de finalización (excepto tal vez para "desenvolver" la matriz de los pares propiedad:debido a que la función de reducción no puede devolver una matriz, debe envolverla de esa manera en un objeto)