Поиск документа в MongoDB с помощью _id с использованием расширения Flask-pymongo

Меня озадачивает следующая проблема.

Я использую Flask, расширение flask-pymongo, версию mongodb v2.2.0-rc0, версию pdfile 4.5

Это мой маршрут:

@app.route("/check/<id>")
def check(id):
   doc=conn.db.msg.find_one({'_id':id})
   return render_template('base.html',name=doc)

id является допустимым _id из документа в коллекции msg, но ВСЕГДА возвращает None.

Я пробовал:

  • pasing ObjectId (id), но возвращает errortype: ObjectId не вызываемый
  • pasing id, поскольку str (id) возвращает None

Любые мысли?

UPDATE: это как выглядит полный URL:

http://127.0.0.1:8000/check/5030b628895b800de1a9a792

UPDATE2:

Я нашел аналогичный вопрос с (ответом) на ruby. Не уверен, как я могу перевести его на python, какие мне нужны импорта/модули?

Как получить документ с помощью _id?

Update3: Я пробовал:

import bson
@app.route("/check/<id>")
def check(id):
id2="'"+id+"'"
doc=conn.db.msg.find_one({'_id':bson.objectid(id2) })
return render_template('base.html',name=doc)

но я получаю объект TypeError: 'module' не вызываем (он тоже не работает с идентификатором)

когда я достиг 1500, я предлагаю тег frustation: -S

UPDATE4:

Наконец-то я его запустил!

вот это мое решение:

import bson
@app.route("/check/<id>")
def check(id):
doc=conn.db.msg.find_one({'_id':bson.ObjectId(oid=str(id))})
return render_template('base.html',name=doc)

Ответы

Ответ 1

Вы также можете попробовать использовать ObjectId из модуля bson.objectid, например:

from bson.objectid import ObjectId

В этом случае вам не нужно указывать oid kwarg. Вы просто сделаете что-то вроде этого:

db_conn.msg.find_one({'_id': ObjectId(my_oid)})