pymongo.errors.OperationFailure: $regex has to be a string
542
작성한 질문수 46
게시판 글 리스트 하던중 검색에서 부터 에러가 발생하였습니다.
두곳 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쪽 제가 코딩을 업로드 해놨습니다.
답변 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 문을 활용하여 값이 제대로 넘어왔는지 확인해보시길 바랍니다.
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





