Skip to content
Advertisement

Feathers-mongoose $like query for MongoDb getting Error

I have the following Mongoose Schema –

const myTableSchema = new Schema({
  Category: { type: String, required: false },
  Tag: { type: String, required: false },

  createdAt: { type: Date, 'default': Date.now },
  updatedAt: { type: Date, 'default': Date.now },
});

Note that, both of them are String. I was trying to do a query like the following –

localhost:1971/api/myTable?Category[$like]=Javascript

I have rows with Javascript in Category column. But getting the following error-

{
  "name": "GeneralError",
  "message": "Can't use $like with String.",
  "code": 500,
  "className": "general-error",
  "data": {},
  "errors": {}
}

Advertisement

Answer

I know its been a while since this was discussed, but I’ve had a similar question and the code provided by @Daff helped me a lot, but it contains an error.

query[field].$like is checked for presence, but then query[field].$search is attached to the final query.

The correct code representation (if following the original question) should be:

exports.searchRegex = function () {
  return function (hook) {
    const query = hook.params.query;
    for (let field in query) {
      if(query[field].$like && field.indexOf('$') == -1) {
        query[field] = { $regex: new RegExp(query[field].$like) }
      }
    }
    hook.params.query = query
    return hook
  }
}
User contributions licensed under: CC BY-SA
7 People found this is helpful
Advertisement