迭代 pymongo 游标时出现 bson 错误



我正在从我的Flask应用程序搜索存储在Mongo中的文档。我的目标是将搜索结果返回到我的应用。我的观点是这样的:

@app.route('/search', methods=['GET', 'POST'])
def search():
form = SearchForm()
if form.validate_on_submit():
search_results = db.openings.find({"$text": {"$search": search}})
print([i for i in search_results])
return redirect(url_for('search_results'))
return render_template('search.html', title='Home', form=form)

如果我只是打印search_results我会得到一个光标对象。当我尝试遍历对象时,就像我在这里的代码中所做的那样,我得到bson.errors.InvalidDocument: cannot encode object: <function search at 0x10df4d510>, of type: <class 'function'>.如果我尝试不使用括号,我会得到另一个游标对象。

最终,我想将结果传递给search_results模板,如下所示:

{% extends "index.html" %}
{% block content%}
<div class="container">
{% for result in search_results %}
<article class="media content-section">
<div class="media-body">
<div class="article-metadata">
<h3><a class="mr-2" href="#">{{ result.title }}</a></h3>
<small class="text-muted">{{ result.company }}</small>
</div>
<p class="article-content">{{ result.description|safe }}</p>
</div>
</article>
{% endfor %}
</div>
{% endblock content %}

通过结果的正确方法是什么?

在这一行:

search_results = db.openings.find({"$text": {"$search": search}})

您正在将当前函数search传递给 find 语句。我怀疑这是你的意图。您在寻找什么?

我不太确定,但你能在这里更改这一行吗?

search_results = db.openings.find({"$text": {"$search": search}})

search_results = list(db.openings.find({"$text": {"$search": search}}))

最新更新