16

我对以下问题感到困惑。

我正在使用 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 是 msg 集合中文档的有效 _id,但总是返回 None。

我试过了:

  • 传递 ObjectId(id) 但返回错误类型:ObjectId 不可调用
  • 将 id 作为 str(id) 传递返回 None

有什么想法吗?

更新:完整的网址如下所示:

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

更新2:

我发现了一个与 (answer) for 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' object is not callable (它也不适用于 id)

当我达到 1500 时,我会建议一个沮丧标签:-S

更新4:

最后我把它启动并运行了!

这是我的解决方案:

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)
4

1 回答 1

32

您可能还想尝试ObjectIdbson.objectid模块中使用,如下所示:

from bson.objectid import ObjectId

在这种情况下,您不需要提供oidkwarg。您只需执行以下操作:

db_conn.msg.find_one({'_id': ObjectId(my_oid)})
于 2012-08-30T14:50:55.183 回答