MongoDB에 대한 쿼리에서 정규식 변수를 사용하려면 어떻게 해야 합니까?
제가 구축한 정규 표현식을 기반으로 MongoDB에 문서를 조회하고 싶습니다.예를 들어, 나는 Nodejs에서 임의의 문자와 임의의 숫자의 조합인 다음과 같은 간단한 정규식을 구성했습니다.
var randnum = Math.floor((Math.random() * 10) + 1);
var alpha = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','X','Y','Z'];
var randletter = alpha[Math.floor(Math.random() * alpha.length)];
var val = randletter + randnum + '.*;
정규식 변수에 대해 다음과 같은 다양한 조합을 시도했습니다.
var stream = collection.find({"FirstName": /val/).stream();
&&
var stream = collection.find({"FirstName": /$val/).stream();
&&
var stream = collection.find({"FirstName": {$in : [{$regex:val}]}}).stream()
&&
var stream = collection.find({"FirstName": {$in : [{$regex:$val}]}}).stream()
아무 것도 효과가 없는 것 같습니다.하지만 실제 regex를 작성할 때 나는 예를 들어 기록을 얻습니다.
var stream = collection.find({"FirstName": /J.*/).stream();
어떤 도움이든 감사하겠습니다.
고마워 가네쉬
저는 제 제목에 대해 같은 문제를 가지고 있었고 많은 검색 후에, 저는 이 답을 찾았습니다.
var search = 'Joe';
db.users.find(name: /^search/)
db.users.find(name: {$regex: /^search/});
db.users.find(name: {$regex: "/^" + search + "/"});
위의 쿼리는 아무것도 반환하지 않습니다.이 작은 문제에 대한 해결책은 매우 간단합니다.
db.users.find(name: new RegExp(search)) //For substring search, case sensitive.
db.users.find(name: new RegExp('^' + search + '$')) //For exact search, case sensitive
db.users.find(name: new RegExp(search, ‘i')) //For substring search, case insensitive
db.users.find(name: new RegExp('^' +search + '$', 'i')); //For exact search, case insensitive
다른 플래그 또는 속성은 여기서 참조를 기준으로 추가할 수 있습니다.
다음을 사용하여 문자열에서 정규식 개체를 만들어야 합니다.RegExp
건설자로서./.../
구문은 리터럴에서만 사용됩니다.
var stream = collection.find({"FirstName": new RegExp(val)}).stream();
다음 코드를 사용하여 정규식 또는 작업에 동적 값을 사용합니다.
{$match: { $or: [{ 'title': { $regex: request.query.val, $options: 'i'} }, { 'skills_required': { $regex: request.query.val, $options: 'i'} }] }},
쿼리 파트의 매개 변수로 변수 val을 사용하려는 경우 다음과 같이 $reggex를 사용할 수 있습니다.
collection.find({"FirstName": {$regex:val}})
설명서에 따라 $in 연산자에 $regex를 넣는 것은 허용되지 않습니다.
정규식 개체를 $in 연산자에 넣으려면 다음과 같이 JavaScript 정규식 개체를 사용해야 합니다.
collection.find({"FirstName": {$in: [/abc/, /123/]}})
그건 그렇고, 발렌타인/val/
는 위에서 정의한 변수가 아닌 상수 문자열입니다.
정규식에 변수가 포함된 경우에는 변수를 이스케이프해야 합니다.
function escapeRegExp(string) {
return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
}
이것은 이렇게 사용할 수 있습니다.
new RegExp(escapeRegExp(searchString), 'i')
또는 이와 같은 mongoDb 쿼리에서
{ '$regex': escapeRegExp(searchString) }
여기에 동일한 의견을 게시했습니다.
let test = `what your regex should search`;
collection.find({
fieldName: {$regex: test}
}).then(result => red.send(result));
몽구스에서 테스트되었지만 몽구스에서도 작동해야 합니다.
제 사용 사례는 주어진 쿼리로 시작하는 결과를 가져오는 것이었고 아래 솔루션이 저에게 효과가 있었습니다.
let q = '^' + query;
return await User.find({ name: { $regex: q, $options: 'i' } }).select('name').limit(10);
언급URL : https://stackoverflow.com/questions/26699885/how-can-i-use-a-regex-variable-in-a-query-for-mongodb
'programing' 카테고리의 다른 글
Excel 프레임을 읽을 때 특정 열 집합 건너뛰기 - 팬더 (0) | 2023.07.19 |
---|---|
파이썬에서 %time은 무엇입니까? (0) | 2023.07.19 |
추적 분기란 무엇입니까? (0) | 2023.07.09 |
표 열의 모든 셀을 특정 값으로 설정 (0) | 2023.07.09 |
CSS 불투명도는 텍스트가 아닌 배경색만 가능합니까? (0) | 2023.07.09 |