• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 Node.js, Express 게시판 Part 3 검색기능 만들기 3 - index를 활용한 검색 시 에러 발생

Part 3 검색기능 만들기 3 - index를 활용한 검색 시 에러 발생

8 글 보임 - 1 에서 8 까지 (총 8 중에서)
  • 글쓴이
  • #84840

    김민서
    참가자
    MongoDB Atlas에서 task에 대한 index를 추가했습니다
    Field에 
    {
        "task": "text"
    }
    로 주라는대로 잘 줬고,
    
    app.get('/search', async (req,res) => {
        try {
          // query string으로 전달된 task 이름을 기준으로 검색
          const data = await db.collection('post').find({$text: {$search: req.query.value}}).toArray();
          res.render('search.ejs', {posts: data});
        } catch(err) {
            console.log(err);
            res.status(500).send(err);
        }
    });
    
    이런 식으로 불러오려했는데 검색만 하면`
    {"ok":0,"code":291,"codeName":"NoQueryExecutionPlans","$clusterTime":{"clusterTime":{"$timestamp":"7237883225136168961"},~~
    에러 메시지가 창에 뜹니다..
    
    GPT한테 물어보니 NoQueryExecutionPlans 이 적합한 index를 찾지 못했을 때 나타나기도 한다던데,
    해결법을 모르겠습니다.
    
    원인이 뭘까요?
    
    
    #84860

    codingapple
    키 마스터
    .find 말고 강의에 나오는 .aggregate 써봅시다
    #84900

    김민서
    참가자
    네, 강의 후반부 참고해서 .aggregate() 를 사용해보았습니다.
    하지만 또 에러가 발생하더군요
    MongoServerError: $search is not allowed with 'apiStrict: true' in API Version 1
    
    공식 홈페이지 찾아보니 apiStrict: false로 정의하면 된다길래 strict 속성을 바꿔주니 잘 동작했습니다.
    또 find() 를 이용한 text index 검색도 잘 동작하더라고요!
    
    혹시 strict: true 인채로 index 활용한 검색을 하는 방법은 없을까요?
    
    
    
    #84942

    codingapple
    키 마스터
    아마 mongodb 라이브러리 예전버전 쓰는 방법밖에 없을걸요
    #84951

    김민서
    참가자
    감사합니다 선생님!
    추가 질문도 여기 대댓글로 달게요
    
    https://codingapple.com/forums/topic/%eb%b0%b0%ed%8f%ac%ec%8b%9c-%ec%97%90%eb%9f%ac%ea%b0%80-%eb%b0%9c%ec%83%9d%ed%95%98%eb%8a%94%eb%8d%b0-%ea%b2%80%ec%83%89%ed%95%b4%eb%b4%90%eb%8f%84-%eb%aa%a8%eb%a5%b4%ea%b2%a0%ec%8a%b5%eb%8b%88/
    #74651 
    이분과 동일한 에러 메시지가 뜨는데
    설치된 node.js 19 버전 대신 18버전을 설치한 후 서버에 올려야하나요?
    #84970

    codingapple
    키 마스터
    18버전써야합니다 대부분 클라우드에서 신문법이나 nodejs 신버전 지원이 아직 안됩니다
    #85025

    김민서
    참가자
    엇.. 확인해보니 node.js는 v18.16.0 LTS 버전 잘 쓰고 있었어요ㅋㅋㅋ
    node_modules/mongodb/lib/operations/add_user.js 파일의 16번째 줄을
    "this.options = (options !== null && options !== undefined) ? options : {};" 이렇게 직접 수정하고
    
    'gcloud app deploy' 해도 동일한 에러 메시지가 뜨면서 실패하네요
    
    /app/node_modules/mongodb/lib/operations/add_user.js:16
            this.options = options ?? {};
                                    ^
    
    대신 tsconfig.json 파일의 "importsNotUsedAsValues": "error", 이 부분에 빨간 밑줄이 쳐졌습니다
    이미 deprecated된 option이라네요 vscode 도움말 상으로는..
    
    node_modules의 파일을 다이렉트로 수정해도 업로드 시 변경사항 반영이 안되나요?
    또 tsconfig.json 파일이 원인일 가능성도 있을까요?
    감사합니당
    #85032

    codingapple
    키 마스터
    mongodb라이브러리에서 ?? 문법쓴다는거같은데 라이브러리 버전 낮춰야할듯요
8 글 보임 - 1 에서 8 까지 (총 8 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠