MongoDB query builder module for hsa-technologies-00
npm install @hsa-technologies-00/hsa-query-builder$gt, $lt, $in, $regex, and more.
customer.address.city).
bash
npm install @hsa-technologies-00/hsa-query-builder
`
Or using yarn:
`bash
yarn add @hsa-technologies-00/hsa-query-builder
`
---
Usage
$3
`typescript
import { MongoQuery } from '@hsa-technologies-00/hsa-query-builder';
const queryParams = {
search: 'John',
age_gt: 25,
'customer.address.city': 'New York',
page: 2,
limit: 20,
select: 'name,age',
sort: 'age,-name',
};
const filter = new MongoQuery(queryParams, {
searchFields: ['name', 'email'],
}).build();
const query = filter.getFilterQuery();
const options = filter.getQueryOptions();
console.log('Filter Query:', query);
console.log('Query Options:', options);
`
$3
`javascript
Filter Query: {
$or: [
{ name: { $regex: 'John', $options: 'i' } },
{ email: { $regex: 'John', $options: 'i' } }
],
age: { $gt: 25 },
customer: { address: { city: 'New York' } }
}
Query Options: {
page: 2,
limit: 20,
select: 'name age',
sort: 'age -name'
}
`
---
API Documentation
$3
#### Constructor
`typescript
new MongoQuery(queryParams: QueryParams, options?: MongoQueryOptions)
`
- queryParams: An object containing query parameters (e.g., search, age_gt, page, limit, etc.).
- options: Optional configuration object with the following properties:
- searchFields: An array of fields to search (e.g., ["name", "email"]).
#### Methods
- build(): Builds the filter query and query options.
- getFilterQuery(): Returns the MongoDB filter query.
- getQueryOptions(): Returns the query options (e.g., page, limit, select, sort).
---
$3
The following MongoDB operators are supported:
| Operator | MongoDB Equivalent | Example Usage |
| ----------- | ------------------ | --------------------------------------- |
| or | $or | { age_or: [20, 25] } |
| gt | $gt | { age_gt: 25 } |
| gte | $gte | { age_gte: 25 } |
| lt | $lt | { age_lt: 30 } |
| lte | $lte | { age_lte: 30 } |
| in | $in | { age_in: [20, 25] } |
| nin | $nin | { age_nin: [20, 25]} |
| ne | $ne | { age_ne: 25 } |
| equals | $eq | { age_equals: 25 } |
| regex | $regex | { name_regex: "John"} |
| elemMatch | $elemMatch | { tags_elemMatch: { $in: ["tech"] } } |
| all | $all | { tags_all: ["tech", "mongodb"] } |
---
$3
You can filter nested objects using dot notation. For example:
`typescript
const queryParams = {
'customer.address.city': 'New York',
};
`
This will generate the following MongoDB query:
`javascript
{
customer: {
address: {
city: 'New York';
}
}
}
`
---
$3
To perform a case-insensitive search across multiple fields, use the search parameter and specify the searchFields option:
`typescript
const queryParams = {
search: 'John',
};
const filter = new MongoQuery(queryParams, {
searchFields: ['name', 'email'],
}).build();
`
This will generate the following MongoDB query:
`javascript
{
$or: [{ name: { $regex: 'John', $options: 'i' } }, { email: { $regex: 'John', $options: 'i' } }];
}
`
---
$3
The following query parameters are supported for pagination and sorting:
- page: The page number (default: 1).
- limit: The number of items per page (default: 10).
- select: Fields to include or exclude (e.g., name,age).
- sort: Sorting criteria (e.g., age,-name for ascending by age and descending by name).
---
Contributing
Contributions are welcome! Please follow these steps:
1. Fork the repository.
2. Create a new branch (git checkout -b feature/YourFeature).
3. Commit your changes (git commit -m 'Add some feature').
4. Push to the branch (git push origin feature/YourFeature`).