ошибка bson при переборе курсора pymongo - PullRequest
0 голосов
/ 06 октября 2019

Я выполняю поиск из приложения 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 %}

Чтоправильный способ передачи результатов?

Ответы [ 2 ]

1 голос
/ 07 октября 2019

В этой строке:

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

Вы передаете текущую функцию search в оператор поиска. Я сомневаюсь, что это твое намерение. Что вы ищете?

0 голосов
/ 06 октября 2019

Я не совсем уверен, но вы можете изменить эту строку здесь;

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

на

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