diff --git a/packages/rocketchat-lib/server/startup/cache/_Base.js b/packages/rocketchat-lib/server/startup/cache/_Base.js index c46310a1aa6..18b440674ee 100644 --- a/packages/rocketchat-lib/server/startup/cache/_Base.js +++ b/packages/rocketchat-lib/server/startup/cache/_Base.js @@ -516,7 +516,33 @@ RocketChat.cache._Base = (class CacheBase extends EventEmitter { return result; } + processQuery(query) { + if (!query) { + return query; + } + + for (const field in query) { + if (query.hasOwnProperty(field)) { + const value = query[field]; + if (value instanceof RegExp) { + query[field] = { + $regex: value + }; + } + + if (field === '$and' || field === '$or') { + query[field] = value.map((subValue) => { + return this.processQuery(subValue); + }); + } + } + } + + return query; + } + find(query, options={}) { + query = this.processQuery(query); return { fetch: () => { return this.processQueryOptionsOnResult(this.collection.find(query), options); @@ -533,10 +559,12 @@ RocketChat.cache._Base = (class CacheBase extends EventEmitter { } findOne(query, options) { + query = this.processQuery(query); return this.processQueryOptionsOnResult(this.collection.findOne(query), options); } findWhere(query, options) { + query = this.processQuery(query); return this.processQueryOptionsOnResult(this.collection.findWhere(query), options); }