정수 값에 대한 MongoDB 정규식 검색
MongoDB에서 정수 값을 정규식으로 검색하고 싶습니다.이것이 가능합니까?
저는 다양한 필드에서 와일드카드 *를 허용하는 CRUD 타입 인터페이스를 구축하고 있습니다.나는 정수인 몇 개의 필드에 대해 UI를 일관되게 유지하려고 합니다.
고려 사항:
> db.seDemo.insert({ "example" : 1234 });
> db.seDemo.find({ "example" : 1234 });
{ "_id" : ObjectId("4bfc2bfea2004adae015220a"), "example" : 1234 }
> db.seDemo.find({ "example" : /^123.*/ });
>
보시다시피, 저는 어떤 물체를 삽입하고 그 값으로 그것을 찾을 수 있습니다.단순한 정규식을 시도해보면, 실제로 그 물체를 찾을 수 없습니다.
감사합니다!
만약 당신이 숫자에 패턴 매치를 하고 싶다면, mongo에서 하는 방법은 $where 표현을 사용하고 패턴 매치를 통과하는 것입니다.
> db.test.find({ $where: "/^123.*/.test(this.example)" })
{ "_id" : ObjectId("4bfc3187fec861325f34b132"), "example" : 1234 }
나는 쿼리 연산자를 사용하는 것을 좋아하지 않습니다. 쿼리 표현식을 평가하는 방식 때문에 쿼리가 사용자 입력 데이터를 사용하는 경우 인덱스와 보안 위험을 사용하지 않기 때문입니다.
MongoDB 4.2부터는 다음을 사용할 수 있습니다.$regexMatch|$regexFind|$regexFindAll
MongoDB 4.1.9+ 및 에서 사용 가능$expr
이를 위해.
let regex = /123/;
$regexMatch
그리고.$regexFind
db.col.find({ "$expr": { "$regexMatch": { "input": {"$toString": "$name"}, "regex": /123/ } } })
$regexFinAll
db.col.find({ "$expr": { "$gt": [ { "$size": { "$regexFindAll": { "input": {"$toString": "$name"}, "regex": "123" } } }, 0 ] } })
MongoDB 4.0에서 다음을 사용할 수 있습니다.$toString
주변의 래퍼인 연산자$convert
정수를 문자열화하는 연산자입니다.
db.seDemo.aggregate([
{ "$redact": {
"$cond": [
{ "$gt": [
{ "$indexOfCP": [
{ "$toString": "$example" },
"123"
] },
-1
] },
"$$KEEP",
"$$PRUNE"
]
}}
])
릴리스 3.4부터 특정 하위 문자열이 포함된 모든 문서를 검색하려는 경우 반복 논리 처리를 허용하는 연산자를 사용할 수 있습니다.$indexOfCP
.
db.seDemo.aggregate([
{ "$redact": {
"$cond": [
{ "$gt": [
{ "$indexOfCP": [
{ "$toLower": "$example" },
"123"
] },
-1
] },
"$$KEEP",
"$$PRUNE"
]
}}
])
이는 다음을 생성합니다.
{
"_id" : ObjectId("579c668c1c52188b56a235b7"),
"example" : 1234
}
{
"_id" : ObjectId("579c66971c52188b56a235b9"),
"example" : 12334
}
MongoDB 3.4 이전 버전에서는 문서에 추가하고 번호의 문자열 값인 다른 계산 필드를 추가해야 합니다.
와 형제 연산자는 문자열을 각각 소문자와 대문자로 변환하지만 정수를 문자열로 변환하는 데 사용할 수 있다는 약간의 알 수 없는 기능이 있습니다.
오퍼레이터는 오퍼레이터를 사용하여 패턴과 일치하는 모든 문서를 반환합니다.
db.seDemo.aggregate(
[
{ "$project": {
"stringifyExample": { "$toLower": "$example" },
"example": 1
}},
{ "$match": { "stringifyExample": /^123.*/ } }
]
)
다음과 같은 결과:
{
"_id" : ObjectId("579c668c1c52188b56a235b7"),
"example" : 1234,
"stringifyExample" : "1234"
}
{
"_id" : ObjectId("579c66971c52188b56a235b9"),
"example" : 12334,
"stringifyExample" : "12334"
}
이제 특정 하위 문자열이 포함된 모든 문서를 검색하는 것을 원하는 경우, 이 작업을 수행하는 더 쉽고 더 나은 방법은 연산자를 사용하여 반복 논리 처리를 허용하는 MongoDB의 다음 릴리스입니다.$indexOfCP
.
db.seDemo.aggregate([
{ "$redact": {
"$cond": [
{ "$gt": [
{ "$indexOfCP": [
{ "$toLower": "$example" },
"123"
] },
-1
] },
"$$KEEP",
"$$PRUNE"
]
}}
])
언급URL : https://stackoverflow.com/questions/2908100/mongodb-regex-search-on-integer-value
'programing' 카테고리의 다른 글
단순 해시 함수 (0) | 2023.07.13 |
---|---|
처음 두 행을 제외한 엑셀 파일을 읽는 방법 (0) | 2023.07.13 |
좋은 디자인을 배우기 위해 연구할 가치가 있는 오픈 소스 C 프로젝트는 무엇입니까? (0) | 2023.07.13 |
jxl api / Apache POI를 사용하여 기존 Excel 파일 편집 (0) | 2023.07.13 |
Git로 파일 복사 작업 기록 (0) | 2023.07.13 |