Поиск документа в 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)})