@rapiq/parser-mongo
Parse MongoDB-style filter documents into a rapiq Query.
$and / $or / $nor, $gte / $in / $not / $regex, $elemMatch
for clients that submit filters as JSON.
Documentation · Monorepo · npm
Part of rapiq. Typed REST queries: build, transport, validate, execute. Bring a familiar MongoDB-style query document to any rapiq backend. Useful when clients submit filters as typed JSON in request bodies or saved queries.
{
$or: [
{ name: 'John', age: { $gte: 18, $lt: 65 } },
{ 'realm.name': { $startsWith: 'mas' } },
],
}
- Familiar syntax:
$and/$or/$norcompounds, De Morgan$not/$nornegation, field operators ($eq,$gte,$in,$regex,$elemMatch, …) and six$contains-family rapiq extensions. - Typed values: JSON keeps its types (
{ $gte: 18 }stays a number), no wire-string coercion. - Two-class failure model: grammar errors always throw
FiltersParseError; field-key/allow-list failures follow the schema drop-vs-throw policy. - Same AST as every dialect: only
filtersis mongo-flavoured; fields, relations, pagination and sorts reuse@rapiq/parser-simple.
Installation
npm install @rapiq/core @rapiq/parser-simple @rapiq/parser-mongo
Usage
import { MongoParser } from '@rapiq/parser-mongo';
const parser = new MongoParser(registry);
const query = parser.parse({
filters: { age: { $gte: 18 }, 'realm.name': 'master' },
sorts: '-age',
pagination: { limit: 25 },
}, { schema: 'user' });
Only the filters parameter uses the mongo dialect; fields, relations, pagination and sorts accept the same input as @rapiq/parser-simple, and the whole thing returns the same Query AST.
Grammar errors (unknown $-operators, misplaced operators, malformed operator arguments) always throw FiltersParseError; field keys that fail the schema allow-list are dropped by default and throw when throwOnFailure is set.
The rapiq family
| Package | Purpose |
|---|---|
| @rapiq/core | Query AST, typed build layer & schema system (the shared foundation) |
| @rapiq/parser-simple | Parse plain object/array input (the "simple" dialect) |
| @rapiq/parser-expression | Parse filter expressions like and(eq(name,'John'), gte(age,'18')) |
| @rapiq/parser-mongo | Parse MongoDB-style filter documents like { age: { $gte: 18 } } |
| @rapiq/codec-url | URL query-string transport codec |
| @rapiq/adapter-sql | Dialect-agnostic SQL fragment adapter (pg, mysql, sqlite, mssql, oracle) |
| @rapiq/adapter-typeorm | Apply a query to a TypeORM SelectQueryBuilder |
| @rapiq/adapter-prisma | Serialize a query into a Prisma argument object |
| @rapiq/adapter-drizzle | Serialize a query into a Drizzle relational query config |
| @rapiq/adapter-memory | Evaluate a query against in-memory objects & arrays |
Documentation
Full guide (operator table & deviations from MongoDB): rapiq.tada5hi.net/packages/parser-mongo
License
Published under the MIT License.