sql >> Database >  >> NoSQL >> MongoDB

Hoe maak ik hoofdletterongevoelige zoekopdrachten op Mongodb?

De oplossing van Chris Fulstow werkt (+1), maar is misschien niet efficiënt, vooral niet als uw verzameling erg groot is. Niet-geroote reguliere expressies (die niet beginnen met ^ , die de reguliere expressie verankert aan het begin van de tekenreeks), en degenen die de i . gebruiken vlag voor hoofdletterongevoeligheid zal geen indexen gebruiken, zelfs als ze bestaan.

Een alternatieve optie die u zou kunnen overwegen, is om uw gegevens te denormaliseren om een ​​kleine versie van de name op te slaan. veld, bijvoorbeeld als name_lower . U kunt dat vervolgens efficiënt opvragen (vooral als het is geïndexeerd) voor niet-hoofdlettergevoelige exacte overeenkomsten zoals:

db.collection.find({"name_lower": thename.toLowerCase()})

Of met een prefix-overeenkomst (een geroote reguliere expressie) als:

db.collection.find( {"name_lower":
    { $regex: new RegExp("^" + thename.toLowerCase(), "i") } }
);

Beide zoekopdrachten gebruiken een index op name_lower .



  1. problemen om verbinding te maken met redis om bij meerdere worker-kues te passen

  2. Numpy-array opslaan in mongodb

  3. Hoe de HSET-kindersleutel in redis VERLOPEN?

  4. mongodb $bestaat altijd terugkerende 0