You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flask的MongoEngine中获取含_id与id字段文档的_id

解决MongoEngine中访问_id字段的问题

我太懂这种无奈了——数据库设计不太合理但又没有修改权限,确实头疼。你遇到的KeyError是因为MongoEngine的文档对象并非普通Python字典,虽然它支持用字典式的[]访问部分字段,但默认的_id字段并没有被纳入字典接口,而是作为文档对象的属性存在。给你几个实用的解决办法:

  • 用pk属性访问主键:MongoEngine给所有文档都提供了pk(primary key)属性,它会直接映射到数据库里的_id字段,不管你的模型有没有显式定义这个字段。用法超简单:

    primary_key = doc.pk
    

    这是最通用的方式,哪怕后续主键逻辑有变动(当然这里大概率不会),这个方法依然有效。

  • 直接访问_id属性:如果你的模型没有把自定义的id字段和默认主键搞混(或者说模型里没显式覆盖id属性),可以直接通过对象属性的方式访问:

    mongo_id = doc._id
    

    注意这里是用点.访问,不是方括号[],因为这是对象的属性,而非字典的键。

  • 转成字典后访问:如果你确实习惯用字典方式操作,可以先把文档转换成字典格式:

    doc_dict = doc.to_dict()
    mongo_id = doc_dict['_id']
    

    不过要注意,to_dict()会把ObjectId类型的_id序列化成字符串,如果需要原始的ObjectId对象,前两种方法会更合适。

补充一句:你能用doc['id']拿到自定义的id字段,是因为MongoEngine把模型里定义的普通字段(对应数据库的id)加入了字典式访问支持,但默认的_id属于主键字段,走的是对象属性逻辑,所以没法用[]访问。

内容的提问来源于stack exchange,提问作者Bogdan Vasilescu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 21:52:38