Beispiel:
> db.stuff.save({"foo":"bar"});
> db.stuff.find({"foo":"bar"}).count();
1
> db.stuff.find({"foo":"BAR"}).count();
0
Beispiel:
> db.stuff.save({"foo":"bar"});
> db.stuff.find({"foo":"bar"}).count();
1
> db.stuff.find({"foo":"BAR"}).count();
0
TL;DR
Nicht verwenden RegExp
Gehen Sie natürlich und verwenden Sie die eingebaute Indizierung von Mongodb, Suche
db.articles.insert(
[
{ _id: 1, subject: "coffee", author: "xyz", views: 50 },
{ _id: 2, subject: "Coffee Shopping", author: "efg", views: 5 },
{ _id: 3, subject: "Baking a cake", author: "abc", views: 90 },
{ _id: 4, subject: "baking", author: "xyz", views: 100 },
{ _id: 5, subject: "Café Con Leche", author: "abc", views: 200 },
{ _id: 6, subject: "", author: "jkl", views: 80 },
{ _id: 7, subject: "coffee and cream", author: "efg", views: 10 },
{ _id: 8, subject: "Cafe con Leche", author: "xyz", views: 10 }
]
)
Erforderlich ist die Erstellung eines Indexes für den jeweiligen TEXT Feld, in dem Sie suchen möchten, ohne Indexierung wird die Abfrage extrem langsam sein
db.articles.createIndex( { subject: "text" } )
db.articles.find( { $text: { $search: "coffee",$caseSensitive :true } } ) //FOR SENSITIVITY
db.articles.find( { $text: { $search: "coffee",$caseSensitive :false } } ) //FOR INSENSITIVITY
Eine sehr wichtige Sache zu beachten, wenn Sie eine Regex-basierte Abfrage verwenden - Wenn Sie dies für ein Login-System tun, jedes einzelne Zeichen vermeiden nach dem Sie suchen, und vergessen Sie nicht die Operatoren ^ und $. Lodash hat eine nette Funktion für dies falls Sie es bereits verwenden:
db.stuff.find({$regex: new RegExp(_.escapeRegExp(bar), $options: 'i'})
Und warum? Stellen Sie sich vor, ein Benutzer gibt ein .*
als seinen Benutzernamen. Das würde mit allen Benutzernamen übereinstimmen und eine Anmeldung durch einfaches Erraten des Kennworts eines beliebigen Benutzers ermöglichen.
Für die Suche nach einer Variablen und deren Unterdrückung:
const escapeStringRegexp = require('escape-string-regexp')
const name = 'foo'
db.stuff.find({name: new RegExp('^' + escapeStringRegexp(name) + '$', 'i')})
Das Escapen der Variable schützt die Abfrage vor Angriffen mit '.*' oder anderen Regex.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.