@quenk/search-filters-mongodb
v1.2.1
Published
search-filters compiler for mongodb targets.
Downloads
37
Readme
Search Filters MongoDB
search-filters compiler for mongodb targets
Installation
npm install --save @quenk/search-filters-mongodb
Usage
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.
Available Policies
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.
Example
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());
License
Apache 2.0 (SEE LICENSE) file. (c) Quenk Technologies Limited.