Flask+pymongo环境下如何获取MongoDB新插入的完整文档?
解决方案
pymongo的InsertOneResult对象仅返回插入操作的元数据(如inserted_id),不包含完整文档内容,你可以通过以下两种方式获取完整文档:
方式一:复用插入前的文档对象(无需额外查询,效率最高)
插入前先把待插入的字段定义为独立变量,插入成功后把返回的_id补入该变量即可得到完整文档:
# 先构造待插入文档 student_doc = { "name": args["name"], "surname": args["surname"], "student_number": args["student_number"], "course": args["course"], "mark": args["mark"] } # 执行插入 res = db.students.insert_one(student_doc) # 补入_id得到完整文档 student_doc["_id"] = res.inserted_id # 如果不需要返回_id字段,直接删除即可 # del student_doc["_id"]
此时student_doc就是完整的已插入文档内容。
方式二:通过inserted_id查询数据库(获取数据库侧写入的完整字段)
如果你的集合配置了自动生成的默认字段、或者插入过程中有字段由MongoDB侧自动补充,可以插入后主动查询一次:
res = db.students.insert_one({ "name": args["name"], "surname": args["surname"], "student_number": args["student_number"], "course": args["course"], "mark": args["mark"] }) # 按_id查询完整文档,第二个参数是投影,设置_id:0可以不返回_id字段 full_doc = db.students.find_one({"_id": res.inserted_id}, {"_id": 0})
此时full_doc就是和你需求格式完全一致的文档内容。
内容的提问来源于stack exchange,提问作者crispengari
相关产品推荐
相关产品推荐

