mingo
Version:
MongoDB query language for in-memory objects
28 lines (27 loc) • 886 B
JavaScript
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
};