MongoDB, exécution de requête par expression régulière sur les champs indexés

je veux trouver un compte par son nom (dans une collection MongoDB de 50K comptes)

De la manière habituelle: nous trouver avec de la ficelle

db.accounts.find({ name: 'Jon Skeet' })  // indexes help improve performance!

Que Diriez-vous de l'expression régulière? C'est une opération coûteuse?

db.accounts.find( { name: /Jon Skeet/ }) // worry! how indexes work with regex?

Edit:

selon WiredPrairie:

MongoDB use prefix de RegEx à des index de recherche (ex: /^prefix.*/):

db.accounts.find( { name: /^Jon Skeet/ })  // indexes will help!'

MongoDB $ regex

25
demandé sur shA.t 2013-07-06 14:00:49

1 réponses

en Fait, selon la documentation,

si un index existe pour le champ, alors MongoDB correspond à la normale expression par rapport aux valeurs de l'indice, qui peuvent être plus rapides que balayage de la collection. D'autres optimisations peuvent se produire si les expression est une "expression préfixe", ce qui signifie que tout le potentiel les matchs commencent avec la même chaîne. Cela permet à MongoDB de construire un "range" à partir de ce préfixe et ne correspondent qu'à ces valeurs de la indice qui se situent dans cette fourchette.

http://docs.mongodb.org/manual/reference/operator/query/regex/#index-use

En d'autres termes:

pour /Jon Skeet / regex, mongo va balayer les clés dans l'index puis va chercher les documents correspondants, ce qui peut être plus rapide que le balayage de la collection.

pour /^Jon Skeet/ regex ,mongo ne scannera que la plage qui commence avec le regex dans l'index, ce qui sera plus rapide.

24
répondu m_elsayed 2015-10-19 16:26:06