Mongo에서 대소 문자를 구분하지 않는 검색
Mongo에서 https://stackoverflow.com/q/5500823/1028488 과 유사한 대소 문자를 구분하지 않는 검색을 사용하고 있습니다 .
즉, 옵션 i와 함께 정규식을 사용하고 있습니다. 하지만 정규식을 해당 단어로 제한하는 데 문제가 있습니다. SQL에서 '좋아요'와 비슷하게 수행됩니다.
예 : 같은 쿼리를 사용하면 {"SearchWord" : { '$regex' : 'win', $options: '-i' }}
win, window 및 winter에 대한 결과가 표시됩니다. jsut show win으로 제한하려면 어떻게합니까?
나는 시도 /^win$/
했지만 유효하지 않은 Json .... 방법을 제안하십시오.
미리 감사드립니다
'$regex':'^win$'
또는 사용할 수 있습니다 /^win$/i
(두 번째에는 따옴표가 없습니다).
출처 : Mongo를 사용한 쿼리의 정규식
$options => i
대소 문자를 구분하지 않는 검색에 사용할 수 있습니다 . 문자열 일치에 필요한 몇 가지 가능한 예를 제공합니다.
대소 문자를 구분하지 않음 string
db.collection.find({name:{'$regex' : '^string$', '$options' : 'i'}})
포함 string
db.collection.find({name:{'$regex' : 'string', '$options' : 'i'}})
시작 string
db.collection.find({name:{'$regex' : '^string', '$options' : 'i'}})
끝 string
db.collection.find({name:{'$regex' : 'string$', '$options' : 'i'}})
포함하지 않음 string
db.collection.find({name:{'$regex' : '^((?!string).)*$', '$options' : 'i'}})
이것을 책갈피로 보관하고 필요한 기타 변경 사항에 대한 참조로 보관하십시오. http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/
업데이트 : MongoDB 2.4부터는 "텍스트"인덱스와 전체 텍스트 검색 쿼리를 사용하여이를 수행합니다. 여기에서 그들에 대해 읽을 수 있습니다 . 최근 MongoDB를 사용하는 경우 아래의 접근 방식은 어리 석고 불필요합니다.
그러나 MongoDB가 2.4.0 미만인 경우 다음과 같은 정규식을 사용할 수 있습니다.
> db.reg.insert({searchword: "win"})
> db.reg.insert({searchword: "window"})
> db.reg.insert({searchword: "Win"})
> db.reg.find()
{ "_id" : ObjectId("4ecd2e33dd68c9021e453d12"), "searchword" : "win" }
{ "_id" : ObjectId("4ecd2e36dd68c9021e453d13"), "searchword" : "window" }
{ "_id" : ObjectId("4ecd2e39dd68c9021e453d14"), "searchword" : "Win" }
> db.reg.find({ searchword: /^win$/i })
{ "_id" : ObjectId("4ecd2e33dd68c9021e453d12"), "searchword" : "win" }
{ "_id" : ObjectId("4ecd2e39dd68c9021e453d14"), "searchword" : "Win" }
그러나 $ regex 연산자를 사용할 때 "/"가 필요하지 않기 때문에 버전이 작동하지 않았습니다.
> db.reg.find({ searchword: { $regex: "^win$", $options: '-i' }})
{ "_id" : ObjectId("4ecd2e33dd68c9021e453d12"), "searchword" : "win" }
{ "_id" : ObjectId("4ecd2e39dd68c9021e453d14"), "searchword" : "Win" }
대소 문자를 구분하지 않는 쿼리는 색인을 사용하지 않으므로 쿼리 속도를 높일 수 있도록 소문자 검색 단어 필드를 만드는 것이 좋습니다.
Go here for more info on RegularExpressions
Use $strcasecmp. The aggregation framework was introduced in MongoDB 2.2. You can use the string operator "$strcasecmp" to make a case-insensitive comparison between strings. It's more recommended and easier than using regex.
Here's the official document on the aggregation command operator: https://docs.mongodb.com/manual/reference/operator/aggregation/strcasecmp/#exp._S_strcasecmp .
For Case insensitive db.users.find({"name":{ $regex : new RegExp("Vi", "i") }})
For Case sensitive db.users.find({"name":"Vi"}) or db.users.find({"email":"example@mail.com"})
search in user table
name is column name and "Vi" text that are searched
ReferenceURL : https://stackoverflow.com/questions/8246019/case-insensitive-search-in-mongo
'IT Share you' 카테고리의 다른 글
CURL (51) SSL 오류 수정 : 일치하는 대체 인증서 주체 이름이 없습니다. (0) | 2021.01.09 |
---|---|
C # PredicateBuilder 엔터티 : 매개 변수 'f'가 지정된 LINQ to Entities 쿼리 식에 바인딩되지 않았습니다. (0) | 2021.01.09 |
프로그래밍 방식으로 textSize 설정 (0) | 2021.01.09 |
Swift에서 SHA1로 NSString을 해시하는 방법은 무엇입니까? (0) | 2021.01.09 |
FormData (HTML5 Object)를 JSON으로 변환하는 방법 (0) | 2021.01.09 |