search-filters compiler for mongodb targets
npm install --save @quenk/search-filters-mongodb
This module provides a @quenk/search-filters compiler for generating
mongodb query filters from a source string. It targets the Node.js Driver API particularly
the Collection#find
method.
To compile a source string, create an instance of MongoDBFilterCompiler
,
and apply the compile()
method. It takes an EnabledPolicies and
a valid search-filters source string.
This module ships with the following Available Policies :
Policy Name | Type | Operators | Notes |
---|---|---|---|
number | number | = < > >= <= != | |
boolean | boolean | = < > >= <= != | |
string | string | = != | Tests equality. |
match | string | = | Converts value to regex. |
matchci | string | = | Case-insensitive "match". |
date | date | = < > >= <= != | Actual value instanceof Date (UTC) |
datetime | datetime | = < > >= <= != | Actual value instanceof Date (UTC) |
numbers | list-number | in !in | |
booleans | list-boolean | in !in | |
strings | list-string | in !in | |
dates | list-date | in !in | |
datetimes | list-datetime | in !in |
You can specify one of the above policy names in your EnabledPolicies
and it will be subsitituted at compile time.
Consult the search-filters docs for more information.
You can add additional AvailablePolicies
by overriding the policies
argument of the MongoDBFilterCompiler
constructor.
import {Value} from '@quenk/noni/lib/data/jsonx';
import {MongoDBFilterCompiler} from '@quenk/search-filters-mongodb';
import {FilterTerm} from '@quenk/search-filters-mongodb/lib/term';
const policies = {
name: 'matchci',
age: 'number'
status: {
type: 'number',
operators: ['='],
term: (field:string, op:string, value:Value ) =>
new FilterTerm(field, op, value)
}
}
const qry = '(name:"sana" or name:="Murr") and age:>20 and status:1';
let mfc = new MongoDBFilterCompiler();
let eResult = mfc.compile(qry);
/* Logs the below or throws if an error occured.
{"$and":
[
{
"$or":[
{"name":{"$regex":"sana", $options:"i"}},
{"name":{"$regex":"Murr", $options:"i"}}
]
},
{"age":{"$gt":20}},
{"status":{"$eq":1}}
]
}
*/
console.log(eResult.takeRight());
Apache 2.0 (SEE LICENSE) file. (c) Quenk Technologies Limited.
Generated using TypeDoc