使用MongoDB查询运算符时返回pymongo.cursor.Cursor对象而非文档的问题
解决pymongo find返回Cursor对象无法获取数据的问题
核心原因
pymongo中collection.find()方法无论是否使用查询运算符,返回的都是pymongo.cursor.Cursor对象,这是官方设计的正常特性,不是bug。你觉得只有用$开头的运算符时才出现这个问题,大概率是之前简单查询时无意中做了遍历/转列表的操作(比如直接打印转换后的列表),而这次没做;或者教程里老师的代码有遍历步骤但没在视频里完整展示。
解决方案
要获取实际的文档数据,你需要对Cursor对象进行遍历,或者转换成列表:
方法1:遍历Cursor(内存友好,推荐)
result = collection.find({ "school_score" : { "$gt" : 80 } }) # 遍历逐个获取文档 for doc in result: print(doc)
方法2:转换为列表(适合数据量小的场景)
result = list(collection.find({ "school_score" : { "$gt" : 80 } })) print(result)
方法3:仅需单个匹配文档时
用find_one()代替find(),直接返回单个文档对象:
result = collection.find_one({ "school_score" : { "$gt" : 80 } }) print(result)
补充说明
Cursor对象是惰性加载的,只有当你开始遍历或者转换为列表时,才会真正向MongoDB发送查询请求并拉取数据,这种设计是为了处理大数据量查询时节省内存开销。
内容的提问来源于stack exchange,提问作者Göksu Nişancı
相关产品推荐
相关产品推荐

