蒙哥马利
Typescript 工具来操纵 MongoDB 查询语言 .
拿着 npm add @coyotte508/mongo-query。 。 。 .
简化筛选
function simplifyFilter<T>(filter: Filter<T>): Filter<T>;
结果是: parseFilter 可以是动词,有很多逻辑组合. simplifyFilter 目的是简化滤波器,从而减少动词.
譬如说, simplifyFilter({$and: [{}, {x: 1}, {y: 2}]} 改为:
{x: 1, y: 2}
倒数
function inverseFilter<T>(filter: Filter<T>): Filter<T>;
这倒置了一个过滤器 。 譬如说, inverseFilter({a: {$in: [1, 2]}}) 将变成 {a: {$nin: [1, 2]}}。 。 。 .
它试图保持简单,但并不是每个倒置都被执行. 在这种情况下, $not 已使用.
解析过滤器
/**
* @param filter Human-readable boolean filter, eg !(A&&(!B)&&(C||D))
* @param replace A map or replacement function to replace keys by mongodb filters
* @returns A mongodb filter
*/
function parseFilter(filter: string): SearchGroupJson<string>;
function parseFilter<T>(filter: string, replace: Map<string, Filter<T>> | ((key: string) => Filter<T>)): Filter<T>;
这将一个人可读取的布尔滤波器转换为MongoDB滤波器.
filter 可使用下列运算符: ! (没有), || (或)和 && (AND)和括号.
replace 是用于替换的映射或函数 A, (中文(简体) ), B...用真正的蒙哥布语句.
例如,可以是:
function replace(expr: `${key}:${val}`) {
const [key, val] = expr.split(":");
return { key: { $in: val.split(",") } };
}
或:
replace = new Map([
["A", {user: 'somebody'}],
["B", {createdAt: {$lt: 'somedate'}}],
["C", someOtherCondition],
...
])
返回值是一个mongodb过滤器,其组合为 $and, (中文(简体) ), $or 财务报告和审定财务报表 $nor。 。 。 .
譬如说, parseFilter("!(A&&(!B)&&(C||D))") 将返回 :
{"$and":[{"$nor":[{"$and":["A",{"$and":[{"$nor":["B"]}]},{"$or":["C","D"]}]}]}]}
输出是动词,所以结合 simplifyFilter。 。 。 .
搜索组
过滤器的布尔组合的内部代表. 它被使用为 parseFilter这只是一个包装器周围 new SearchGroup(string).toJSON()。 。 。 .
与AST类似,它可以被操纵并被转化,或者被分析.