25

" $ / . @ > "ドキュメントなどの特殊文字を含む値を検索したい。

考えてみましょう、私は次のような値を持つ myKey を持っています"test$australia", "test$austria", "test$belgium", "green.africa".

値を検索したい'.*$aus.*',

例えば、

db.myCollection.find({ myKey : /.*$aus.*/i }); 

また

db.myCollection.find({ myKey : { '$regex' : '.*$aus.*','$options' : 'i' });

上記のクエリは機能しません。どのようにクエリを作成すればよいですか? MongoDB 2.4.1 を使用しています。

4

7 に答える 7

23

次の方法でエスケープする必要があり$ます\

db.myCollection.find({ myKey : /.*\$aus.*/i }); 
// OR
db.myCollection.find({myKey: { $regex: '.*\\$aus.*', $options: 'i'}})
于 2013-05-15T09:00:37.987 に答える
5

すべての正規表現の特殊文字をエスケープします。

  req.query.name.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');

正規表現とオプション "i" (大文字と小文字を区別しない) を使用してクエリを作成します。

  const databaseQuery.name = new RegExp(`${req.query.name}`, 'i');

クエリを使用して検索を実行します。

  db.collection.find(databaseQuery)

注: 検索するフィールドのインデックスを作成することを忘れないでください。フィールドにインデックスを付けると、正規表現クエリの速度が向上します。私の場合、「名前」フィールドは次のようになります。

  db.collection.createIndex({ name: "text" })
于 2018-09-13T21:25:00.570 に答える