mingo
Version:
MongoDB query language for in-memory objects
35 lines (34 loc) • 863 B
JavaScript
import { assert, isNumber } from "../../util";
import { applyUpdate, DEFAULT_OPTIONS, walkExpression } from "./_internal";
function $inc(expr, arrayFilters = [], options = DEFAULT_OPTIONS) {
for (const amount of Object.values(expr)) {
assert(isNumber(amount), `Cannot increment with non-numeric argument.`);
}
return (obj) => {
return walkExpression(
expr,
arrayFilters,
options,
(val, node, queries) => {
return applyUpdate(
obj,
node,
queries,
(o, k) => {
if (isNumber(o[k]) || o[k] === void 0) {
const previous = o[k];
o[k] ||= 0;
o[k] += val;
return o[k] !== previous;
}
return false;
},
{ buildGraph: true }
);
}
);
};
}
export {
$inc
};