ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 문자열 연산자
    데이터베이스/MongoDB 2023. 12. 28. 11:54

    ◎ $regex 연산자

    • 값이 정규 표현식과 맞는 도큐먼트를 선택
    • $regex 연산자는 옵션 값을 설정할 수 있어 다른 연산자와는 형식이 조금 다름
    # 연산자의 형식 3가지
    { <field>: {$regex: /pattern/, $options: '<options>'} }
    { <field>: {$regex: 'pattern', $options: '<options>'} }
    { <field>: {$regex: /pattern/<options>} }
    옵션 설명
    i 대소문자 무시
    m 정규식에서 앵커(^)를 사용할 때 값에 \n이 있다면 무력화
    x 정규식 안에 있는 공백을 모두 무시
    s 점(.)을 사용할 때 \n을 포함해서 매치

    <options> 자리에는 표의 네 가지 문자를 넣을 수 있음

     

    ◎ $text 연산자

     

    $text 연산자는 해당 컬렉션의 텍스트 인덱스 안에서만 작동

    db.stores.insertMany(
    [
      { _id: 1, name: 'Java Hut', description: 'Coffee and cakes'},
      { _id: 2, name: 'Burger Buns', description: 'Gourmet hamburgers'},
      { _id: 3, name: 'Coffee shoping', description: 'Just coffee'},
      { _id: 4, name: 'Clothes Clothes Clothes', description: 'Discount clothing'},
      { _id: 5, name: 'Java Shopping', description: 'Indonesian goods'},
      { _id: 6, name: '영희의 옷', description: '옷이 펄럭거리다'},
      { _id: 7, name: '달리는 철수', description: '철수는 인도인'},
    ]
    )
    
    /* $text 연산자를 이용해 문자열을 검색하려면 먼저 문자열 인덱스를 생성해야 함
    예시에서는 name, description 필드에 텍스트 인덱스 설정하는 명령어 사용 */
    db.stores.createIndex( {name: 'text', description: 'text'})

     

    # 사용 예시
    db.stores.find({$text: {$search: 'coffee'}})

    • 기본적으로 대소문자를 구분하지 않고 검색
    db.stores.find({$text: {$search: 'bake coffee cake'}})

    • 여러 단어를 띄어쓰기와 함께 사용하게 되면 해당 단어들 중 일부만 포함된 도큐먼트라도 불러오게 됨
    db.stores.find({$text: {$search: "\"coffee shop\""}})

     

    • 띄어쓰기를 한 상태의 문구를 검색하고 싶은 경우 큰따옴표 앞에 "\" 문자를 붙여 큰따옴표를 이스케이핑
    • 작은따옴표는 적용되지 않으므로 반드시 큰따옴표 사용
    db.stores.find({$text: {$search: "shopped"}})

    • 언어별 대응 가능
    • shop의 과거형을 검색해도 shop의 진행형인 shopping이 포함된 도큐먼트를 불러올 수 있음 (한글은 적용 x)
    # text 연산자 문법
    {
      $text:
        {
          $search: <string>,
          $language: <string>,
          $caseSensitive: <boolean>,
          $diacriticSensitive: <boolean>
        }
    }
    필드 설명
    $search 검색하려는 내용을 담음, 구절로 설정되지 않으면 띄어 쓴 단어를 포함한 모든 도큐먼트를 불러옴
    $language 선택적, 검색하는 언어 설정, MongoDB가 지원하는 언어를 설정할 수 있음, 설정되지 않으면 인덱스에 설정된 내용을 따름
    $caseSensitive 선택적, 불린 값을 가짐, 문자의 대소문자를 구분할지 결정
    $diacriticSensitive 선택적, 불린 값을 가짐, 알파벳의 위아래에 붙이는 기호를 무시할지 결정, 기본 값은 false

     

    '데이터베이스 > MongoDB' 카테고리의 다른 글

    쿼리 작성 실습  (0) 2023.12.28
    배열 연산자  (0) 2023.12.28
    배열 연습 문제  (0) 2023.12.15
    MongoDB 문제 예제 2  (0) 2023.12.14
    MongoDB 문제 예제 1  (0) 2023.12.14
Designed by Tistory.