Gebruik $in
Voor de vraag in de vraag is het beter om $in
. te gebruikendb.Profiles.find ( { "name" : { $in: ["gary", "rob"] } } );
Waarom werkt het niet
Er ontbreekt een citaat - de cli wacht op u om het tweede deel van uw of:
db.Profiles.find ( { $or : [ { "name" : "gary" }, {"name":"rob} ] } )
..............................................................^
U moet de query voldoende voltooien zodat de cli deze kan ontleden, zodat hij kan zeggen dat er een syntaxisfout is.
Hoofdletterongevoelige overeenkomst
Zoals aangegeven door een opmerking, als u hoofdletterongevoelig wilt zoeken, gebruikt u ofwel $or
met een $regex:
db.Profiles.find ( { $or : [ { "name" : /^gary/i }, {"name": /^rob/i } ] } )
Of u gebruikt gewoon één regex:
db.Profiles.find ( { "name" : /^(gary|rob)/i } )
Een regex-query die niet met een vaste tekenreeks begint, kan echter geen index gebruiken (hij kan geen index gebruiken en doet in feite "hier beginnen totdat er geen overeenkomst is gevonden en vervolgens wordt behouden") en is daarom suboptimaal. Als dit uw vereiste is, is het een beter idee om een genormaliseerd naamveld op te slaan (bijv. name_lc
- naam in kleine letters) en vraag daarop:
db.Profiles.find ( { "name_lc" : { $in: ["gary", "rob"] } } );