Reputation: 991
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
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
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
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