I have a document in MongoDB with a regex attribute

    {
        _id: ObjectId("516023189732da20ce000004"),
        regex: /^(my|your)\s+regex$/
    }

and I need to retrieve this document with something like db.col.find({regex: 'your regex'}) and db.col.find({regex: 'my regex'}). In MySQL I'd do: SELECT * FROM table WHERE 'my regex' REGEXP table.regex. How can I achieve this in MongoDB?

Solution 1

You can use the $where operator in the following fashion:

db.col.find({$where: "\"my regex\".match(this.regex)"})

Solution 2

As explained into Jira ticket provided by @fgalan on 2013, you can use $expr you can use this query:

db.collection.find({
  "$expr": {
    "$regexMatch": {
      "input": "$key",
      "regex": "$regex",
      "options": "i"
    }
  }
})

Example here

With $expr you can avoid $where which is not efficient.