使用Flask pymongo扩展按id在MongoDB中搜索文档

2024-04-20 08:43:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我对下面的问题感到困惑。

我正在使用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,但始终不返回任何id。

我试过:

  • pasing ObjectId(id)但返回errortype:ObjectId不可调用
  • 将id转换为str(id)将不返回任何值

有什么想法吗?

更新: 完整的url如下所示:

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

更新2:

我发现了一个类似于ruby的问题(答案)。不确定如何将其转换为python,我需要什么样的导入/模块?

How can I retrieve a document by _id?

更新3: 我试过:

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”对象不可调用(它也不适用于id)

当我达到1500时,我会建议使用frustation标记-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)

Tags: idappdbdocreturndefchecktemplate
1条回答
网友
1楼 · 发布于 2024-04-20 08:43:53

您还可以尝试使用bson.objectid模块中的ObjectId,如下所示:

from bson.objectid import ObjectId

在这种情况下,您不需要提供oidkwarg。你就这样做:

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

相关问题 更多 >