inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

남박사의 파이썬으로 실전 웹사이트 만들기

pymongo.errors.OperationFailure: $regex has to be a string

542

nicolas83

작성한 질문수 46

2

게시판 글 리스트 하던중 검색에서 부터 에러가 발생하였습니다.

두곳 find 값을 {}로 하고 save하고 창을 띄우면 우선 창은 뜸니다 

그런데 자동적으로 검색창 안에 None이라고 떠있습니다.

파이썬 이라고 검색하면 우선 검색은 되는데 터미널에 '$regex': None

검색어인 파이썬 이라고 떠야 하는 것을 알고 있습니다.

그리고 주소창에 keyword=파이썬이라고 우선 뜨지만 페이지를 변경하거나 상새페이지로 이동하면

keyword=파이썬이란 글이  유지되지 않고 사라집니다

동영상 강의대로 keyword=keyword, search=search page=page 각각 다 추가하였는데 이런 현상이 발생됩니다. 

lists에 있는 find 두속에 {}를 지우고 query집어넣으면 에러 창이 뜹니다.

pymongo에 문재란거 같은대 내용으로썬 잘 이해가 안가는 내용입니다.

run.py 에 view method 맨 아래 search=search에 에러표기도 되었습니다.

60분짜리 강의여서 coding도 많았고 좀 많은 문제가 발생한거 같습니다.

확실히 기역하는것은 검색부터  문제가 시작되었고 find(query)라고 에러창도 뜨기 시작한것입다.

아래에 run.py에 lists부분과  list.html에 search function쪽 제가 코딩을 업로드 해놨습니다.

python

답변 2

1

남박사

pymongo.errors.OperationFailure: $regex has to be a string

는 regex 는 문자열이어야 한다 뭐 그런 뜻으로 보시면 될 것 같습니다. 위의 상황에서 검색어를 입력하지 않은 경우 

keyword = request.args.get("keyword", type=str)

이렇게만 하면 keyword 값이 존재 하지 않는 경우 keyword 변수에는 None 값이 들어가게 됩니다. 그로인해 find() 함수 호출시 검색 조건에 None 이 기입되어있을테고 그래서 파이몽고가 None 을 입력받았기 때문에 오류가 발생하고 None 이 아닌 문자열 값을 넘겨달라는 오류 입니다.

keyword = request.args.get("keyword", "", type=str)

위와 같은 식으로 기본값을 "" 빈 문자열로 설정하면 해당 문제는 해결되리라 보여집니다.

그리고 view 에 워닝으로 표기되는 search 값은 해당 밑줄에서 마우스 오버를 해보시면 오류의 원인이 나옵니다 그 부분을 참고하셔야 할듯 합니다. 단순 pylint 의 경고성 표기인지 오류인지 위의 스샷만 봐서는 알 수가 없을듯 합니다.

"파이썬" 검색시에 페이지를 변경하거나 상세페이지를 들어가면 값이 사라진다고 하셨는데 페이지 변경이 어떤걸 말씀하시는지 몰라 그 부분은 정확한 답을 드리기가 어렵겠고 상세페이지를 들어가면 값이 사라지는건 상세페이지로 링크를 하게 되는 경우 

<!--반복되는 구간-->
{% for data in datas %}
<tr>
    <td>{{(tot_count + 1) - (loop.index + ((page - 1) * limit))}}</td>
    <td><a href="{{url_for('board.board_view', idx=data._id, page=page, search=search, keyword=keyword)}}">{{data.title}}</a></td>
    <td>{{data.name}}</td>
    <td>{{data.pubdate | formatdatetime}}</td>
    <td>{{data.view}}</td>
</tr>
{% endfor %}
<!--반복되는 구간 끝-->

그러니까 위의 리스트가 출력되는 html 에서 board_view 링크에 search 와 keyword 값이 제대로 설정되어있는지부터 확인해보셔야 할듯 합니다. 브라우저에서 해당 검색 결과 리스트를 출력해놓은 상태에서 마우스 우클릭 > 소스보기를 하시면

위의 이미지에서처럼 search 와 keyword 값이 소스보기상에 나타나야 합니다. 여기서 문제가 없다면 py 파일의 view 함수에서 해당 search, keyword 변수값이 제대로 request 되는지 확인해보셔야 합니다.

def board_view(idx):
    #idx = request.args.get("idx")
    if idx is not None:
        page = request.args.get("page")
        search = request.args.get("search")
        keyword = request.args.get("keyword")

        print("페이지:{} 대상:{} 검색어:{}".format(page, search, keyword))
        board = mongo.db.board
        # data = board.find_one({"_id": ObjectId(idx)})
        data = board.find_one_and_update({"_id": ObjectId(idx)}, {"$inc": {"view": 1}}, return_document=True)

위의 코드에서처럼 print 문을 활용하여 값이 제대로 넘어왔는지 확인해보시길 바랍니다.

0

nicolas83

잘 해결되었습니다

고맙습니다.

iis 접속후 자동으로 로그인 창이 나오도록 설정이 기능한가요?

0

65

2

리스트 이동 시 창 에러 발생

0

75

1

배포후 회원 등록 후 로그인 에러...

0

73

2

내부 서버 오류

0

67

2

app.config["MONGO_URI"] = "mongodb://localhost:27017/pm_db"

0

53

2

DB 검색하면 데이터가 없습니다. 라고 나와요. 5시간을 찾아봐도 모르겠어서 문의드려봅니다.

0

47

1

몽고db studio3T를 깔았는데

0

57

2

flake8과 linter

0

74

3

500이 뜹니다.

0

57

2

첨부파일 삭제

0

66

2

검색기능 질문

0

61

2

google.py

0

66

2

Studio 3T에 DB insert가 되지 않는 문제를 해결하지 못하고 있습니다 ㅠ

0

82

3

혹시 전체 코드 공개되어 있나요?

0

96

1

join.html 의 form 태그값 을 member_join() 에서 처리못함.

0

103

1

google.py 몽고db 샘플데이터 만들기

0

100

2

flake8 설치 이후 명령팔레트에서 linter가 안보입니다.

0

237

2

파이썬으로 만들어서 웹호스팅에 올릴경우

0

304

1

현재 구글검색 무한스크롤변경 문의합니다

0

297

1

몽고디비아틀라스로 추가 공부해서 올립니다.

0

218

1

IIS 500.19에러

0

659

2

버전 문제도 수정했는데 결과가 안나옵니다.

0

258

1

데이터베이스 저장관련 질문입니다.

0

270

1

test가 생기지 않습니다.

0

509

3