Home » Nodejs » MongoDB Regular Expression Search – Starts with using javascript driver and NodeJS

MongoDB Regular Expression Search – Starts with using javascript driver and NodeJS

Posted by: admin November 30, 2017 Leave a comment


I’m using the JavaScript mongodb driver from nodejs. I want to do this query in my JavaScript function:


The mongo client retrieves 8 docs that match this criteria. However my JavaScript code does not fetch any documents.

    DataProvider.prototype.findByZipcode = function(zipCode, callback) {
        this.getCollection(function(error, collection) {
            if (error)
            else {
                var qs = '{Zip:/^'+zipCode+'/}';
                collection.find(qs).toArray(function(error, results) {
                    if (error)
                        callback(null, results);

I also tried

var qs = {Zip: '/^'+zipCode+'/'};

Btw, I find exact match works fine, but that’s not what I want.


var q = {'Zip' :zipCode};

You almost have it. You keep ending up with a regex inside a string and looking for the string '/^94404/' going to find anything unless you have some strange looking zip codes.

The easiest way to build a regex object from a string in JavaScript is to use new RegExp(...):

var query = { Zip: new RegExp('^' + zipCode) };

Then you can:


That sort of thing works in the MongoDB shell and similar things work in the Ruby interface so it should work in the JavaScript interface as well.


$options => i for case insensitive search

Start with string

db.collection.find({zip:{'$regex' : '^string', '$options' : 'i'}})

End with string

db.collection.find({zip:{'$regex' : 'string$', '$options' : 'i'}})

Contains string

db.collection.find({zip:{'$regex' : 'string', '$options' : 'i'}})

Doesn’t Contains string

db.collection.find({zip:{'$regex' : '^((?!string).)*$', '$options' : 'i'}})

Keep this as a bookmark, and a reference for any other alterations you may need.