42
votes

I would like to query multiple fields using the same regular expression for both. In this query, I would like to accept a single text input and check both the firstName and lastName fields for results. I can query a single field just fine using the regex function in the mongoose documentation, but the syntax for an 'or' clause is giving me trouble.

var re = new RegExp(req.params.search, 'i');

app.User.find().or([{ 'firstName': { $regex: re }}, { 'lastName': { $regex: re }}]).sort('title', 1).exec(function(err, users) {
    res.json(JSON.stringify(users));
});

(I'm running mongoose 2.7.1 on node.js 0.6.12)

1
Syntax looks ok; can you expand on the trouble it's giving you?JohnnyHK
Oh darn. It was some bad data. It turns out that does indeed work fine.RevNoah
What if you had a person named "Joe Smith" and and someone searched for "Joe S" - no results?Mike Causer
Good question. A much more robust solution would be needed for partial keyword matches.RevNoah
@MikeCauser: Any idea how to write search query in case if someone searches for "Joe S" and get records like "Joe Smith" in result. I need to implement it but facing trouble.Raeesaa

1 Answers

16
votes

The code above works fine for a query on multiple fields. Turns out I had some bad data.