如何在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
相关产品推荐
相关产品推荐

