少なくともthis
のスコープを変更したため、以前のバージョンではまったく機能しなかったはずです。 ここで、「データ」を最上位の要素として参照します。要するに、これはもはや許可されておらず、絶対に必要な場合を除いて、JavaScriptメソッドを使用するべきではありません。それでも、ほとんどの場合、おそらくもっと良い方法があります。
しかし実際には、これを行う他の演算子が存在する場合は必要ないため、これはJavaScriptマッチングの不必要な使用です。
$ regex
>
代わりにフォーム:
db.docs.find({ "data.First_name": /^kim/i })
または、フィールド内の任意の場所で、キャレットを削除します ^
:
db.docs.find({ "data.First_name": /kim/i })
これはJavaScriptの実行とほぼ同じくらい非効率的ですが、そのインタープリターエンジンを介した処理のオーバーヘッドがないほどではありません。そしてもちろん、それはどこでも機能します。
また、JavaScriptに依存して解決するクエリが実際に行っていることについても考えてください。
- JavaScriptインタープリターインスタンスを呼び出します
- ドキュメントごとのBSONドキュメントタイプをJavaScriptタイプに変換します
- ドキュメントごとにインタプリタでJavaScriptコードを評価します
- JavaScript
true | false
をキャストします ドキュメントごとの結果として戻る
$ regex
(ただし、大文字と小文字を区別しない一致は最適ではありません)は同じ操作を実行しますが、ドキュメントごとに変換および再キャストせずにネイティブに「pcre」Cライブラリを使用するため、明らかに2つの正しい選択です。