当前位置: 首页 > 知识库问答 >
问题:

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

空枫涟
2023-03-14

我对以下问题感到困惑。

我正在使用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。

我试过:

  • 点击ObjectId(id),但返回错误类型:ObjectId不可调用
  • 按id作为str(id)返回无

有什么想法吗?

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

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

更新2:

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

如何通过_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:'模块'对象是不可调用的(它不工作与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)

共有1个答案

曾典
2023-03-14

您可能还想尝试使用来自bson.objectid模块的ObjectId,如下所示:

from bson.objectid import ObjectId

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

db_conn.msg.find_one({'_id': ObjectId(my_oid)})
 类似资料:
  • 问题内容: 我需要使用pymongo用python搜索ObjectId,但是我总是会收到此错误。有什么想法如何搜索? 问题答案: 我使用pymongo 2.4.1。

  • 我的mongoDB中有这种数据 这里假设我做一个查询 这给了我她的结果,但我有名字“nna”或名字“Ana”或名字“anna”或任何其他组合。那么,如何使用Mongoose获取MongoDB中字符串的最接近值呢

  • 我在MongoDB有一个收藏,里面有以下文档。 现在,我尝试使用以下查询查询一些文档。 根据我的理解,由于\u id是一个复合字段,并且Mongo总是在\u id上维护一个索引,因此要回答上述查询,Mongo应该在“\u id”上使用索引。然而,上述问题的答案如下: 可以观察到,MongoDB正在对DB进行一次完整的扫描,以查找少量文档。我不知道这里到底怎么了。 我试图改变查询的顺序,但结果相同。

  • 我有以下收藏: 我想通过firstname和/或lastname搜索用户(firstname/lastname/firstname+lastname)。 编辑3: 错误:

  • 问题内容: 我需要在我的Linux系统(专用的虚拟主机)上找到所有文件。我尝试了以下方法:,但是不起作用。有什么建议吗? 问题答案: 您可以使用以下find命令执行此操作: 进行不区分大小写的搜索。

  • 问题内容: 我如何在mongodb文档中嵌套文档的地方搜索文档。例如,我有一组私人消息。每条私人消息都有两个嵌套文档- 一个代表发送用户,另一个代表接收使用。两个嵌套文档的格式均为- userID:34343,名称:Joe Bloggs 我希望能够搜索用户发送的所有邮件(例如,搜索发件人用户的嵌套文档)。 我正在使用Java驱动程序。我是否需要创建一个代表嵌套文档的DBObject? 谢谢 问题答