私のコレクションでは、次のクエリで結果が返されます。
db.c.find({t:/a/})
しかし、以下のクエリ (および を持つその他の正規表現\uXXXX
) は結果を返しません。
db.c.find({t:/\u0041/})
なにが問題ですか?
この理由は、ドキュメントによると
MongoDBは、正規表現にPCREを使用します。
ただし、PCREドキュメントには
次のPerlエスケープシーケンスはサポートされていません:文字名またはUnicode値が後に続く場合、\ l、\ u、\ L、\ U、および\N。(\ N自体は、改行以外の文字と一致することがサポートされています。)実際、これらはPerlの一般的な文字列処理によって実装され、パターン一致エンジンの一部ではありません。これらのいずれかがPCREで検出された場合、デフォルトでエラーが生成されます。ただし、PCRE_JAVASCRIPT_COMPATオプションが設定されている場合、\Uと\uはJavaScriptが解釈するように解釈されます。
そうは言っても、このSOの質問は役立つかもしれません。
Ray Toalの回答を使用して\x{XXXX}
、JavaScriptの代わりにPCRE構文を使用すると\uXXXX
問題が解決しました。
db.c.find({t:/\x{0041}/})