16

I have a problem here. I want to query my MongoDB in my Node JS file using something like LIKE for a conventional relational db. The problem is the thing I want to LIKE to is not a literal...it is a variable! I have found no good way to do this as of yet. Here was the "durrr first try" shot I took at it:

var result = postData.replace(/\+/g,' ').substring(5);
db.testlogwiki.find({"line_text" : /result/ };
//predictably only matches to the literal "result" as opposed to my variable

testlogwiki is made in Mongo...I have it running and this does mach to db entries with "line_text" containing "result" literally.

It seems like a very simple question...

PinkElephantsOnParade
  • 6,452
  • 12
  • 53
  • 91

4 Answers4

38

Try this one:

db.testlogwiki.find({"line_text" : new RegExp(result) };
Sergio Tulentsev
  • 226,338
  • 43
  • 373
  • 367
5

Both will work

db.testlogwiki.find({"line_text" : new RegExp(result, 'i') }; // to make this case insensitive 

or

db.testlogwiki.find( { line_text: { $regex: result[, $options: 'i'] } } );
Lance Roberts
  • 22,383
  • 32
  • 112
  • 130
Tridib
  • 49
  • 1
  • 1
4

All of the other answers may fail depending on your input variable

You can use RegExp as others have indicated but you must escape special regex characters or else this can fail.

Lodash has a function to do this (if you aren't using it you probably should be, it adds a lot of sugar that isn't even in the ES6+ spec)

https://lodash.com/docs#escapeRegExp

db.COLLECTION.find({FIELD_NAME: new RegExp(_.escapeRegExp(VAR), 'i') };

John Culviner
  • 22,235
  • 6
  • 55
  • 51
2

You can also use the $regex option.

db.testlogwiki.find( { line_text: { $regex: result[, $options: 'i'] } } );
az_
  • 1,493
  • 1
  • 16
  • 24