sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur gör jag skiftlägesokänsliga frågor på Mongodb?

Chris Fulstows lösning kommer att fungera (+1), men den kanske inte är effektiv, speciellt om din samling är väldigt stor. Icke-rotade reguljära uttryck (de som inte börjar med ^ , som förankrar det reguljära uttrycket till början av strängen), och de som använder i flagga för skiftlägeskänslighet kommer inte att använda index, även om de finns.

Ett alternativt alternativ som du kan överväga är att avnormalisera dina data för att lagra en version med gemener av name fältet, till exempel som name_lower . Du kan sedan fråga det effektivt (särskilt om det är indexerat) för skiftlägesokänsliga exakta matchningar som:

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

Eller med en prefixmatchning (ett rotat reguljärt uttryck) som:

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

Båda dessa frågor kommer att använda ett index på name_lower .



  1. MongoDB update()

  2. Hur kapslar man en lista i en struktur i Redis för att minska toppnivån?

  3. MongoDb:hitta djupt kapslade objekt med $lookup

  4. MongoDB $minut