UNPKG

mingo

Version:

MongoDB query language for in-memory objects

27 lines (26 loc) 880 B
import { Query } from "../../query"; import { isObject, isOperator } from "../../util"; import { applyUpdate, DEFAULT_OPTIONS, walkExpression } from "./_internal"; const $pull = (obj, expr, arrayFilters = [], options = DEFAULT_OPTIONS) => { return walkExpression(expr, arrayFilters, options, (val, node, queries) => { const wrap = !isObject(val) || Object.keys(val).some(isOperator); const query = new Query(wrap ? { k: val } : val, options); const pred = wrap ? (v) => query.test({ k: v }) : (v) => query.test(v); return applyUpdate(obj, node, queries, (o, k) => { const prev = o[k]; const curr = new Array(); let ok = false; prev.forEach((v) => { const b = pred(v); if (!b) curr.push(v); ok ||= b; }); if (!ok) return false; o[k] = curr; return true; }); }); }; export { $pull };