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
'programing' 카테고리의 다른 글
SSL_connect에서 반환된 =1 errno=0 상태=SSLv3 읽기 서버 인증서 B: 인증서 확인 실패 (0) | 2023.06.22 |
---|---|
Android의 Test와 동일한 기능을 가진 iOS에서 메시지 표시 (0) | 2023.06.22 |
SQL 내부 조인 on select 문 (0) | 2023.06.17 |
Python 문제의 SQLalchemy에서 Synology NAS의 MariaDB 데이터베이스에 연결 (0) | 2023.06.17 |
WooCommerce get_cart() on null (0) | 2023.06.17 |