Soorya Prakash
Soorya Prakash

Reputation: 991

Using $regex mongodb query in node js not working


From node js, i trying to retrieve the documents based on the keyword with case-insensitive. When i try directly from the mongo db console , i am able to see the result.

db.users.findOne({"displayName":{$regex: /.*abc./, $options:"i"}})

But when i try the same in node js, i am getting empty result.

var selector = { "displayName": {$regex: "/.*abc./", $options:"i"}}

is this due to regular expression not in javascript.
Can anyone please help me in this.

Upvotes: 21

Views: 33880

Answers (3)

Ganesh Apune
Ganesh Apune

Reputation: 197

In mongodb console try this query

db.users.findOne({"displayName":{$regex: ".*abc", $options:"i"}})

and in nodejs var selector = users.find({ "displayName": {$regex: ".*abc", $options:"i"}})

here users = is a collection name

Upvotes: 5

Soe Naing Tun
Soe Naing Tun

Reputation: 375

could you please try this one, It works for me.

var getValue = "abc";

db.users.findOne({ displayName: new RegExp(regexValue, "i") }, function(err, res) {
  if (err) {
    console.log(err);
  } else {
    console.log(res.length);
  }
});

Upvotes: 15

JohnnyHK
JohnnyHK

Reputation: 311855

The $regex value needs to be either the string pattern to match or a regular expression object. When passing a string pattern, you don't include the / delimitters like you're doing in your node.js code.

So either of these would work in node.js:

var selector = {"displayName": {$regex: ".*abc.", $options:"i"}}

OR

var selector = {"displayName": {$regex: /.*abc./, $options:"i"}}

Upvotes: 33

Related Questions