Skip to content

Instantly share code, notes, and snippets.

@maumercado
Created November 2, 2015 18:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save maumercado/295be9cbd1d87896a990 to your computer and use it in GitHub Desktop.
Save maumercado/295be9cbd1d87896a990 to your computer and use it in GitHub Desktop.
var _ = require('lodash')
Query.prototype.search = function (search_query, options) {
var query = this;
var value = null;
if (!_.isEmpty(search_query)) {
request_query = search_query;
} else {
request_query = {};
}
delete request_query.maxId;
delete request_query.sinceId;
Object.keys(request_query).forEach(function (key) {
if(request_query[key]==="true" || request_query[key]==="false"){
value = request_query[key] == "true";
query.where(key).equals(value);
} else {
if (Number(request_query[key]) && ( (!_.isEmpty(options) && !options[key]) || (!_.isEmpty(options) && options[key] == "number") )) {
value = Number(request_query[key]);
query.where(key).equals(value);
} else if ( !_.isEmpty(options) && options[key] == "exact") {
var qObj = {};
qObj[key] = new RegExp("^" + request_query[key] + "$", "i");
query.or([qObj]);
} else {
value = request_query[key];
var arrayJson = {};
var regexJson = {};
arrayJson[key] = value instanceof Array ? { $in: value } : { $in: [value] };
regexJson[key] = value instanceof Array ? { $in: _.map(value, function (v) { return new RegExp(v,"i"); } ) } : { $regex: new RegExp(value, "i") };
if ( query._conditions.$or ) {
_or = query._conditions.$or;
delete query._conditions.$or;
query.or([{$or: _or}, {$or: [arrayJson, regexJson]}]);
} else {
query.or([arrayJson, regexJson]);
}
}
}
});
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment