sql >> Database >  >> NoSQL >> MongoDB

Stop Mongodb met het negeren van speciale tekens?

Tomalak's beschrijving van hoe tekstindexering werkt, is correct, maar u kunt een tekstindex gebruiken voor een exacte woordgroepovereenkomst op een woordgroep met een speciaal teken:

> db.test.drop()
> db.test.insert({ "_id" : 0, "t" : "hey look at all this #text" })
> db.test.insert({ "_id" : 1, "t" : "text is the best" })
> db.test.ensureIndex({ "t" : "text" })

> db.test.count({ "$text" : { "$search" : "text" } })
2
> db.test.count({ "$text" : { "$search" : "#text" } })
2

> db.test.find({ "$text" : { "$search" : "\"#text\"" } })
{ "_id" : 0, "t" : "hey look at all this #text" }

Exacte overeenkomsten met woordgroepen worden aangegeven door de woordgroep tussen dubbele aanhalingstekens te plaatsen, die in de shell moeten worden escaped, zoals "\"#text\"" .

Tekstindexen zijn groter dan normale indexen, maar als u veel hoofdletterongevoelige exacte woordgroepen gebruikt, kunnen ze een betere optie zijn dan een standaardindex omdat ze beter presteren. Bijvoorbeeld in een veld t met een index { "t" : 1 } , een exacte match-regex

> db.test.find({ "t" : /#text/ })

voert een volledige indexscan uit. De analoge (maar niet equivalente) tekstquery

> db.test.find({ "$text" : { "$search" : "\"#text\"" } })

zal de tekstindex gebruiken om documenten te zoeken die de term "text" bevatten en scan vervolgens al die documenten om te zien of ze de volledige zin "#text . bevatten ".

Wees voorzichtig, want tekstindexen zijn niet hoofdlettergevoelig. Voortzetting van het bovenstaande voorbeeld:

> db.test.insert({ "_id" : 2, "t" : "Never seen so much #TEXT" })

> db.test.find({ "t" : /#text/ })
{ "_id" : 0, "t" : "hey look at all this #text" }

> db.test.find({ "$text" : { "$search" : "\"#text\"" } })
{ "_id" : 0, "t" : "hey look at all this #text" }
{ "_id" : 2, "t" : "Never seen so much #TEXT" }



  1. Mongoose limiet/offset en telling query

  2. Kan mongodb worden gebruikt als een ingesloten database?

  3. ScaleGrid kondigt gedeelde MongoDB-hosting aan op Amazon AWS

  4. Gratis implementatie en monitoring van open source databases met ClusterControl Community Edition