mingo
Version:
MongoDB query language for in-memory objects
25 lines (24 loc) • 842 B
JavaScript
import { computeValue } from "../../../core/_internal";
import { Lazy } from "../../../lazy";
import { assert, compare, isArray, isNil, isObject } from "../../../util";
import { $sort } from "../../pipeline/sort";
import { errExpectArray } from "../_internal";
const $sortArray = (obj, expr, options) => {
assert(
isObject(expr) && "input" in expr && "sortBy" in expr,
"$sortArray expects object { input, sortBy }"
);
const { input, sortBy } = computeValue(obj, expr, null, options);
if (isNil(input)) return null;
if (!isArray(input))
return errExpectArray(options.failOnError, "$sortArray 'input'");
if (isObject(sortBy)) {
return $sort(Lazy(input), sortBy, options).collect();
}
const result = input.slice().sort(compare);
if (sortBy === -1) result.reverse();
return result;
};
export {
$sortArray
};