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...

4 Answers 4

38

Try this one:

db.testlogwiki.find({"line_text" : new RegExp(result) };
Sign up to request clarification or add additional context in comments.

2 Comments

You're a saint. Will accept this when I get home (I have a time in which I cannot accept).
Hope your variable doesn't have any regex special characters in it or this will fail!
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'] } } );

Comments

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') };

Comments

2

You can also use the $regex option.

db.testlogwiki.find( { line_text: { $regex: result[, $options: 'i'] } } );

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.