programing

MongoDB 문서에서 특수 문자가 포함된 문자열 검색

padding 2023. 6. 22. 21:34
반응형

MongoDB 문서에서 특수 문자가 포함된 문자열 검색

다음과 같은 특수 문자를 사용하여 값을 검색합니다." $ / . @ > "서류에

예를 들어, I've myKey는 다음과 같은 값을 가집니다."test$australia", "test$austria", "test$belgium", "green.africa".

값을 검색합니다.'.*$aus.*',

예를들면,

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

OR

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

위의 쿼리가 작동하지 않습니다. 쿼리를 어떻게 구성해야 합니까?MongoDB 2.4.1을 사용하고 있습니다.

당신은 탈출해야 합니다.$타고\:

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

모든 정규식 특수 문자 이스케이프:

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

정규식과 옵션 "i"를 사용하여 쿼리를 만듭니다(대소문자 무시).

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

쿼리를 사용하여 검색 수행:

  db.collection.find(databaseQuery)

참고: 검색할 필드에 대한 인덱스를 만드는 것을 잊지 마십시오.필드를 인덱싱하면 정규식 쿼리의 속도가 빨라집니다.내 '이름' 필드의 경우 다음과 같습니다.

  db.collection.createIndex({ name: "text" })

다음을 사용할 수 있습니다.

db.myCollection.find({myKey:{ $regex:new RegExp('^' + 'test$australia'.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') + '$', 'i')}})
db.test.insert({word: 'hai('});
db.test.insert({word: 'jana'});

출력은 다음과 같습니다.

{ "_id" : ObjectId("56f27fb71d843581261433c6"), "word" : "hai(" }
{ "_id" : ObjectId("56f27ffe1d843581261433c8"), "word" : "jana" }

참고: 특별한 차로를 단독으로 원하기 때문에

db.test.find({word:{$regex:"\\("}});

출력은 다음과 같습니다.

{ "_id" : ObjectId("56f27fb71d843581261433c6"), "word" : "hai(" }

https://www.npmjs.com/package/regex-escape 을 사용할 수 있습니다.정규 표현에 사용할 특수 문자를 이스케이프하기 좋은 라이브러리입니다.

    var RegexEscape = require("regex-escape");

    let keyword = RegexEscape("{#/}");
    // => \{#\/\}


   db.myCollection.find({ myKey : { '$regex' : keyword, '$options' : 'mi' });

아래에서 검색 키 정의re.escape특수 문자 정규식의 문제를 해결할 함수입니다.

{search_field: {"$regex": '{}.*'.format(re.escape(search_key)),"$options": 'i'}}

https://stackoverflow.com/a/52322010/8208083 의 Java Equivalent는 다음과 같습니다.

Pattern p = Pattern.compile("[\\.\\*\\+\\?\\^\\${}\\(\\)|\\]\\[\\\\]");
Matcher m = p.matcher(searchKeyword);
searchKeyword = m.replaceAll("\\\\$0");

이 기능은 Spring의 @Query 주석에서 검색 키워드를 전달해야 할 때 유용합니다.

언급URL : https://stackoverflow.com/questions/16560291/searching-string-with-special-characters-in-mongodb-document

반응형