easy-mongo-orm
Version:
A powerful and elegant MongoDB/Mongoose toolkit that makes database operations a breeze with built-in caching, search, pagination, performance monitoring, soft delete, versioning, data export/import, schema validation, and migration utilities
73 lines (72 loc) • 1.71 kB
JavaScript
;
const BaseMongoClient = require('./BaseMongoClient');
const search = require('../operations/search');
class SearchManager extends BaseMongoClient {
constructor(model, options = {}) {
super(model, options);
}
async search({
text,
fields = []
}) {
try {
const searchQuery = {};
if (fields && fields.length > 0) {
searchQuery.$text = {
$search: text
};
return this.Model.find(searchQuery).sort({
score: {
$meta: 'textScore'
}
});
} else {
searchQuery.searchableText = {
$regex: text,
$options: 'i'
};
return this.Model.find(searchQuery);
}
} catch (error) {
console.error('Text search failed:', error);
throw error;
}
}
async searchNearby({
coordinates,
maxDistance = 10000
}) {
try {
return this.Model.find({
'location.coordinates': {
$near: {
$geometry: {
type: 'Point',
coordinates: coordinates
},
$maxDistance: maxDistance
}
}
});
} catch (error) {
console.error('Geospatial search failed:', error);
throw error;
}
}
async fuzzySearch({
field,
query
}) {
try {
// Create a case-insensitive regex pattern with flexible matching
const regex = new RegExp(query.split('').join('.*'), 'i');
const searchQuery = {};
searchQuery[field] = regex;
return this.Model.find(searchQuery);
} catch (error) {
console.error('Fuzzy search failed:', error);
throw error;
}
}
}
module.exports = SearchManager;