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

如何在MongoDB中实现部分/不完全查询?现有代码问题求助

解决方案

以下是修复后的代码,实现了基于输入关键词的部分匹配查询,同时解决了原代码中只返回最后一条结果、异常处理逻辑不当的问题:

@app.route('/search-all/', methods=['GET', 'POST'])
def search_all():
    query = request.form.get("SearchBox", "").strip()
    results = []
    
    if query:
        # 使用$regex实现不区分大小写的部分匹配
        query_filter = {
            "Films.Title": {
                "$regex": query,
                "$options": "i"
            }
        }
        # 查询所有匹配的文档,同时返回匹配的Films元素
        for doc in db['mongo-moviedb'].find(query_filter, {"Films.$": 1}):
            film = doc["Films"][0]
            results.append({
                "title": film["Title"],
                "genre": film["Genre"],
                "cast": film["Actors"],
                "plot": film["Plot"]
            })
    
    if results:
        return render_template('Date-Night.html', films=results)
    else:
        # 无匹配结果或输入为空时返回提示
        error = 'Not found.' if query else 'Please enter a search keyword.'
        return render_template('Date-Night.html', error=error)

关键修改说明:

  • 实现部分匹配:用$regex替代精确匹配,$options: "i"让查询不区分大小写(输入"star"也能匹配"Star Wars"),完全满足模糊搜索需求。
  • 存储所有匹配结果:原代码循环中每次覆盖变量,最后只返回最后一条记录,现在用列表results存储所有匹配的影片数据,模板中可遍历展示全部结果。
  • 优化异常处理:原代码捕获的异常类型并非MongoDB查询会抛出的异常,改成直接检查查询结果是否为空,逻辑更准确。
  • 空输入处理:增加对空查询的判断,避免无意义的数据库查询,同时给出友好提示。

模板适配提示

你需要修改Date-Night.html模板,支持遍历films列表展示多条结果,示例如下:

{% if films %}
    {% for film in films %}
        <div class="film-item">
            <h3>{{ film.title }}</h3>
            <p>Genre: {{ film.genre }}</p>
            <p>Cast: {{ film.cast }}</p>
            <p>Plot: {{ film.plot }}</p>
        </div>
    {% endfor %}
{% elif error %}
    <p>{{ error }}</p>
{% endif %}

内容的提问来源于stack exchange,提问作者Michael Jason Stokes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 13:45:28