mingo
Version:
MongoDB query language for in-memory objects
31 lines (30 loc) • 896 B
JavaScript
import { ComputeOptions, computeValue } from "../../core/_internal";
import { assert } from "../../util";
const $accumulator = (collection, expr, options) => {
assert(
!!options && options.scriptEnabled,
"$accumulator operator requires 'scriptEnabled' option to be true"
);
if (collection.length == 0) return expr.initArgs;
const copts = ComputeOptions.init(options);
const initArgs = computeValue(
copts?.local?.groupId,
expr.initArgs || [],
null,
copts.update({ root: copts?.local?.groupId })
);
let state = expr.init.apply(null, initArgs);
for (const doc of collection) {
const args = computeValue(
doc,
expr.accumulateArgs,
null,
copts.update({ root: doc })
);
state = expr.accumulate.apply(null, [state, ...args]);
}
return expr.finalize ? expr.finalize.call(null, state) : state;
};
export {
$accumulator
};