如何检测MongoDB集合无文档?Flask项目问题求助
解决Flask+MongoDB任务管理应用的无任务判断问题
嘿,我知道你碰到啥问题了!你用ifTask is None来判断用户有没有任务,但这个判断永远不会触发——因为PyMongo的find()方法不管有没有找到匹配的文档,都会返回一个Cursor对象,永远不会是None,这就是为啥你打印出来看到的是pymongo cursor啦。
下面给你几个靠谱的解决思路,结合你的代码修改:
方法1:用count_documents()直接统计任务数量
这个方法最直观,先查询当前用户的任务总数,等于0就说明没有任务:
@app.route("/dashboard") def dashboard(): if "name" in session: username = session['name'] # 统计当前用户的任务数量 task_count = taskAdd.count_documents({"name": username}) name = session['name'] tasknames = [] if task_count == 0: return render_template('dashboard.html', noTasksDB=True) # 有任务的话再查询并整理数据 ifTask = taskAdd.find({"name": username}) for x in ifTask: tasknames.append((x['taskname'], x['Priority'], x['Notfication'])) return render_template('dashboard.html', dashboardPage=True, title=name+"'s Dashboard", name=True, username=username, ifTask=ifTask, tasknames=tasknames, noTasksDB=False)
方法2:把Cursor转成列表,判断列表是否为空
Cursor对象可以转成列表,直接判断列表是否为空就能知道有没有任务,注意转成列表后要保存下来,因为Cursor只能遍历一次:
@app.route("/dashboard") def dashboard(): if "name" in session: username = session['name'] # 将查询结果转为列表 ifTask = list(taskAdd.find({"name": username})) name = session['name'] tasknames = [] # 列表为空说明没有任务 if not ifTask: return render_template('dashboard.html', noTasksDB=True) for x in ifTask: tasknames.append((x['taskname'], x['Priority'], x['Notfication'])) return render_template('dashboard.html', dashboardPage=True, title=name+"'s Dashboard", name=True, username=username, ifTask=ifTask, tasknames=tasknames, noTasksDB=False)
方法3:用find_one()判断是否存在任务
如果只需要判断用户有没有任务(不需要先获取所有任务),可以用find_one(),它在没有匹配文档时会返回None:
@app.route("/dashboard") def dashboard(): if "name" in session: username = session['name'] # 检查是否存在至少一个任务 existing_task = taskAdd.find_one({"name": username}) name = session['name'] tasknames = [] if not existing_task: return render_template('dashboard.html', noTasksDB=True) # 存在任务的话再查询所有任务 ifTask = taskAdd.find({"name": username}) for x in ifTask: tasknames.append((x['taskname'], x['Priority'], x['Notfication'])) return render_template('dashboard.html', dashboardPage=True, title=name+"'s Dashboard", name=True, username=username, ifTask=ifTask, tasknames=tasknames, noTasksDB=False)
小提醒
PyMongo的Cursor是惰性加载的,直接用if ifTask判断的话,只是在检查这个Cursor对象是否可迭代,而不是有没有实际的数据,所以一定要用上面的方法来判断任务是否存在哦~
内容的提问来源于stack exchange,提问作者lilllbroo
相关产品推荐
相关产品推荐

