web-dev-qa-db-ja.com

Mongoでの大文字と小文字を区別しない検索

Mongoでは大文字と小文字を区別しない検索を使用しています。これは https://stackoverflow.com/q/5500823/1028488 に似ています。

つまり、オプションiで正規表現を使用しています。しかし、私は正規表現をそのWordだけに制限するのに苦労しています、それはSQLの「いいね」のように動作します

例:{"SearchWord" : { '$regex' : 'win', $options: '-i' }}のようなクエリを使用すると、勝ち、窓、冬の結果が表示されます。 jsut show winに制限するにはどうすればよいですか?

/^win$/を試しましたが、その言い方は無効ですJson ....方法を提案してください。

前もって感謝します

52
Praneeta

'$regex':'^win$'または/^win$/iを使用できます(2番目の引用符に引用符がないことに注意してください)

ここのソース: Mongoを使用したクエリの正規表現

51
AlphaB

大文字と小文字を区別しない検索には、$options => iを使用できます。文字列の一致に必要な例をいくつか示します。

大文字と小文字を区別しない正確なstring

db.collection.find({name:{'$regex' : '^string$', '$options' : 'i'}})

stringを含む

db.collection.find({name:{'$regex' : 'string', '$options' : 'i'}})

stringで始まる

db.collection.find({name:{'$regex' : '^string', '$options' : 'i'}})

stringで終わる

db.collection.find({name:{'$regex' : 'string$', '$options' : 'i'}})

stringを含まない

db.collection.find({name:{'$regex' : '^((?!string).)*$', '$options' : 'i'}})

これをブックマークとして保持し、必要に応じて他の変更を参照してください。 http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/

96
Somnath Muluk

[〜#〜] update [〜#〜]:MongoDB 2.4以降では、「テキスト」インデックスと全文検索クエリを使用してこれを行います。あなたはそれらについて読むことができます こちら 。最近のMongoDBを使用している場合、以下のアプローチは愚かで不必要です。

ただし、MongoDB <2.4.0の場合は、次のような正規表現を使用できます。

> db.reg.insert({searchword: "win"})
> db.reg.insert({searchword: "window"})
> db.reg.insert({searchword: "Win"})

> db.reg.find()
{ "_id" : ObjectId("4ecd2e33dd68c9021e453d12"), "searchword" : "win" }
{ "_id" : ObjectId("4ecd2e36dd68c9021e453d13"), "searchword" : "window" }
{ "_id" : ObjectId("4ecd2e39dd68c9021e453d14"), "searchword" : "Win" }

> db.reg.find({ searchword: /^win$/i })
{ "_id" : ObjectId("4ecd2e33dd68c9021e453d12"), "searchword" : "win" }
{ "_id" : ObjectId("4ecd2e39dd68c9021e453d14"), "searchword" : "Win" }

ただし、$ regex演算子を使用するときに "/"が必要ないため、バージョンは機能していません。

> db.reg.find({ searchword: { $regex: "^win$", $options: '-i' }})
{ "_id" : ObjectId("4ecd2e33dd68c9021e453d12"), "searchword" : "win" }
{ "_id" : ObjectId("4ecd2e39dd68c9021e453d14"), "searchword" : "Win" }

大文字と小文字を区別しないクエリではインデックスを使用しないため、クエリを高速化するために小文字の検索ワードフィールドを作成するのが理にかなっていることに注意してください。

行く こちら RegularExpressionsの詳細について

19
Tyler Brock

$ strcasecmpを使用します。集約フレームワークはMongoDB 2.2で導入されました。文字列演算子「$ strcasecmp」を使用して、文字列間の大文字と小文字を区別しない比較を行うことができます。正規表現を使用するよりも推奨され、簡単です。

集約コマンド演算子に関する公式ドキュメントは次のとおりです。 https://docs.mongodb.com/manual/reference/operator/aggregation/strcasecmp/#exp._S_strcasecmp .

0
Jogue Wasin