2016-07-18 10 views
3

文字列 "foo"を含むすべてのユーザーをユーザー名で検索したいとします。次の間に実用的な違いはありますか?

db.users.findOne({"username" : {$regex : ".*foo.*"}}) 

とは:

db.users.findOne({"username" : {$regex : "foo"}}) 

の両方が動作しているようです。しかし、誰かが違いを説明できますか?

+1

はい、 '" foo "'は 'foo'が早く見つかるでしょう。 –

答えて

6

動作しますが、.*foo.*で発生をバックトラックによるに有効な一致を返すために多くの時間を必要とします.*foo.*両方。

/.*foo.*/で "いくつかのfooテキストを" 比較:

enter image description here

/foo/

enter image description here

注意をそれは.*最初であることをfoo前にそれを作る最初の正規表現で.fとの両方に一致するため、遅くなります210秒。

関連する問題