MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB Map/Reduce Array-Aggregationsfrage

  1. Das „Chunking“ kommt von Ihrem Code:Der Werteparameter Ihrer Reduce-Funktion kann entweder {time:<timestamp>,value:<value>} enthalten von Ihrer Kartenfunktion ausgegeben, oder {time:[<timestamps>],value:[<values]} von einem vorherigen Aufruf Ihrer Reduce-Funktion zurückgegeben.

  2. Ich weiß nicht, ob es in der Praxis passieren wird, aber es kann theoretisch passieren.

  3. Lassen Sie einfach Ihre Map-Funktion die gleiche Art von Objekten ausgeben, die Ihre Reduce-Funktion zurückgibt, d. h. emit(<id>, {time: [ts], value: [P[1]]}) , und ändern Sie Ihre Reduce-Funktion entsprechend, z. B. Array.push.apply(result.time, V.time) und ähnlich für result.value .

    Nun, ich verstehe eigentlich nicht, warum Sie kein Array von Zeit/Wert-Paaren anstelle eines Array-Paares verwenden, dh emit(<id>, { pairs: [ {time: ts, value: P[1] ] }) oder emit(<id>, { pairs: [ [ts, P[1]] ] }) in der Kartenfunktion und Array.push.apply(result.pairs, V.pairs) in der Reduce-Funktion. Auf diese Weise benötigen Sie nicht einmal die Finalize-Funktion (außer vielleicht, um das Array aus den Paaren zu "entpacken". Eigenschaft:Da die Reduce-Funktion kein Array zurückgeben kann, müssen Sie es so in ein Objekt einschließen)