mingo
Version:
MongoDB query language for in-memory objects
28 lines (27 loc) • 976 B
JavaScript
import { ComputeOptions, evalExpr } from "../../../core/_internal";
import { assert, has, isArray, isNil, isObject, isString } from "../../../util";
import { errExpectArray, errExpectString } from "../_internal";
const $map = (obj, expr, options) => {
assert(
isObject(expr) && has(expr, "input", "in"),
"$map expects object { input, as, in }"
);
const input = evalExpr(obj, expr.input, options);
const foe = options.failOnError;
if (isNil(input)) return null;
if (!isArray(input)) return errExpectArray(foe, "$map 'input'");
if (!isNil(expr.as) && !isString(expr.as))
return errExpectString(foe, "$map 'as'");
const copts = ComputeOptions.init(options);
const k = expr.as || "this";
const locals = { variables: {} };
const result = new Array(input.length);
for (let i = 0; i < input.length; i++) {
locals.variables[k] = input[i];
result[i] = evalExpr(obj, expr.in, copts.update(locals));
}
return result;
};
export {
$map
};