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

如何在Flask+MongoDB中访问嵌套Films列表获取指定字段?

解决MongoDB嵌套Films列表的字段访问问题

核心原因

你的查询结果里,Films是一个列表类型(即使只包含一个电影对象),所以必须先通过索引取出列表中的单个电影字典,再访问其内部字段。

正确的Python代码处理方式

可以在Flask路由中先提取出电影对象,再将需要的字段或整个对象传递给模板:

@app.route('/search-all/', methods=['GET', 'POST'])
def search_all():
    # 用find_one替代find,因为$投影只会返回第一个匹配的文档
    result = db['mongo-moviedb'].find_one({"Films.Title": "Clue"}, {"Films.$": 1})
    
    if result:
        # 取出Films列表中的第一个电影字典
        movie = result['Films'][0]
        # 提取需要的字段到单独变量
        title = movie['Title']
        year = movie['Year']
        director = movie['Director']
        # 将变量传递给模板
        return render_template('Date-Night.html', movie=movie, title=title, year=year)
    
    # 没有找到匹配电影的情况
    return render_template('Date-Night.html', error="未找到指定电影")

模板中的访问方式

如果直接将movie对象传给模板,在Date-Night.html中可以直接访问字段:

<h1>{{ movie.Title }}</h1>
<p>上映年份:{{ movie.Year }}</p>
<p>导演:{{ movie.Director }}</p>

如果传递的是原始result,则需要先取出列表元素:

{% if result and result.Films %}
    {% set movie = result.Films[0] %}
    <h2>{{ movie.Title }}</h2>
    <p>评分:{{ movie.imdbRating }}</p>
{% else %}
    <p>无匹配结果</p>
{% endif %}

为什么你之前的写法无效

  • x['Films']:返回的是整个Films列表,不是单个电影对象,无法直接访问.Title字段
  • x['Films.Title']:这是MongoDB查询语句的语法,Python字典不支持用这种嵌套字符串键访问值
  • x['Films'],['Title']:语法错误,逗号分隔会生成元组,完全不符合字典访问逻辑

内容的提问来源于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.07 08:35:21