UNPKG

mingo

Version:

MongoDB query language for in-memory objects

28 lines (27 loc) 886 B
import { ComputeOptions, computeValue } from "../../core/_internal"; import { assert } from "../../util"; import { $push } from "./push"; const $accumulator = (collection, expr, options) => { assert( options.scriptEnabled, "$accumulator requires 'scriptEnabled' option to be true" ); const copts = ComputeOptions.init(options); const initArgs = computeValue( copts?.local?.groupId, expr.initArgs || [], null, copts.update({ root: copts?.local?.groupId }) ); const args = $push(collection, expr.accumulateArgs, copts); args.forEach((arr) => arr.forEach((v, i) => arr[i] = v ?? null)); const initialValue = expr.init.apply(null, initArgs); const result = args.reduce( (acc, v) => expr.accumulate.apply(null, [acc, ...v]), initialValue ); return expr.finalize ? expr.finalize.call(null, result) : result; }; export { $accumulator };