I run following query in mongo shell:
db.Profiles.find ( { $or: [ {"name": "gary"}, {"name": "rob"} ] } )
It just returns nothing as expected(JSON)?
I run following query in mongo shell:
db.Profiles.find ( { $or: [ {"name": "gary"}, {"name": "rob"} ] } )
It just returns nothing as expected(JSON)?
Use $in
For the query in the question, it's more appropriate to use $in
Why doesn't it work
There's a missing quote - the cli is waiting for you to finish the second part of your or:
You need to finish the query sufficiently for the cli to parse it for it to then say there's a syntax error.
Case insensitive matching
As indicated by a comment, if you want to search in a case insensitive manner, then you either use
$or
with a $regex:Or, you simply use one regex:
However, a regex query that doesn't start with a fixed string cannot use an index (it cannot use an index and effectively do "start here until no match found then bail") and therefore is sub-optimal. If this is your requirement, it's a better idea to store a normalized name field (e.g.
name_lc
- lower case name) and query on that: