sql >> Database >  >> NoSQL >> MongoDB

MongoDB $ of vraag

Gebruik $in

Voor de vraag in de vraag is het beter om $in

. te gebruiken
db.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"] } } );



  1. mongodb 3.x-stuurprogramma Android-compatibiliteit

  2. Redis binden aan meer dan één IP

  3. Mongodb-hotfix KB2731284

  4. Voordelen van MongoDB | Nadelen van MongoDB