You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 18:35:28