• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

아래처럼 {% if datas.count() > 0%} 문법오류

21.12.20 20:18 작성 조회수 423

1

에러
{% if datas.count() > 0 %}
jinja2.exceptions.UndefinedError: 'pymongo.cursor.Cursor object' has no attribute 'count'
 
 
 
아래질문에서 처럼 하면
{% if datas|length > 0 %}
TypeError: object of type 'Cursor' has no len() 로 에러가 납니다
 
 
def lists():
board = mongo.db.board
datas = board.find({})
return render_template("list.html", datas = datas)
 
 
{% if datas.count() > 0 %}
: :
 
{% else %}
<h3>데이터가 없습니다~~</h3>
{% endif %}

답변 3

·

답변을 작성해보세요.

0

몽고디비 버전을 몇을 사용하시는지는 모르겠습니다만 강좌에서 진행되는 버전은 아닌것으로 보입니다. 말씀하신 db.collection.count() 함수는 3.6 버전까지만 지원하는것으로 보입니다.

 

https://docs.mongodb.com/manual/reference/method/db.collection.countDocuments/

https://pymongo.readthedocs.io/en/stable/api/pymongo/collection.html#pymongo.collection.Collection.count_documents

 

위 링크의 문서를 참고해보시기 바랍니다.

0

thisauto님의 프로필

thisauto

질문자

2021.12.21

추가로 
def lists(): 
 board = mongo.db.board 
 datas = board.find({}) 

 datas의 count의 개수를 구하려고 합니다
MongoDB count() Method – db.Collection.count() 에서 처럼
roubo3T에서 db.getCollection('board').find({}).count() 하면 데이타레코드 갯수를 불러오는데

코딩으로
recordcount = board.find({}).count() 표현하면 오류가 발생하네요?
AttributeError: 'Cursor' object has no attribute 'count'
다른방법은 없나요?

가후님의 프로필

가후

2022.02.28

같은 문제에 봉착했네요 해결책은

 

count()는 이제 쓰지 않으니 count_documents({}) 이걸 사용하시면 됩니다

기존코드(영상에 나오는)

tot_count = board.find({}).count() 

위 코드에서

tot_count = board.count_documents({})

이렇게 바꾸시면 됩니다.

 

사용법을 정리하자면

 

콜렉션명.count_documents({조건}) 입니다

저희는 전체 게시물 개수를 가녀와야 하니

조건을 비워두면 전체 게시물 개수를 세어줍니다.

 

진도 나가기가 정말힘드네요

화이팅 하세요

0

몽고 DB 3.7 인가 부터 collection 의 count() 함수를 더 이상 사용할 수 없습니다. 

def lists(): 
board = mongo.db.board 
datas = board.find({}) 
return render_template("list.html", datas = list(datas))

위의 코드처럼 데이터를 넘길때 list 형태로 캐스팅 해서 넘겨야

{% if datas|length > 0 %} 

length 를 사용할 수 있을것 같습니다.

thisauto님의 프로필

thisauto

질문자

2021.12.21

친절한 답변 감사드립니다.

네 그렇게 직접 리스트변수를 선언해서 append 시켜서 넘기셔도 됩니다. 어쨌든 본인이 직접 구글링해보고 스스로 문제를 해결 하셨다는점에 대해 진심으로 박수 보내드리고 싶습니다.