【问题标题】:Why pymongo throwing Attribute-error: 'Cursor' object has no attribute 'find' on second time execution为什么pymongo抛出属性错误:'Cursor'对象在第二次执行时没有属性'find'
【发布时间】:2019-12-20 04:54:31
【问题描述】:

在 pymongo 中,当我第一次执行时,我得到了正确的输出。其次,我得到 AttributeError: 'Cursor' object has no attribute 'find'

courses = courses.find()
for course in courses:
    pprint.pprint(course)

完整代码如下,别忘了安装并启动mongod服务器

from pymongo import MongoClient
import pprint
client = MongoClient()
client = MongoClient('mongodb://localhost:27017')
db  = client['test-database']
##New collection #courses = db['course']
courses = db.courses
print (courses)
#insert new document# create a new dict
course = {
    'author':'Mak',
    'course':'Data',
    'price': 100,
    'rating':5
    }
#insert
result = courses.insert_one(course)
#check whether doc is inserted
if result.acknowledged:
    print ("course added course id is", str(result.inserted_id))
#how to insert many doc
arr_courses =  [ {
    'author':'Hus',
    'course':'Data',
    'price': 100,
    'rating':5},
{
    'author':'ais',
    'course':'Data',
    'price': 100,
    'rating':3.5}
]

result = courses.insert_many(arr_courses)
for object_id in result.inserted_ids:
    print ("course added course id is", object_id)
courses.find_one()
print (course)
courses = courses.find()
for course in courses:
    pprint.pprint(course)

我的问题是如何反复使用courses = courses.find()进行处理?

【问题讨论】:

    标签: python mongodb pymongo


    【解决方案1】:

    您重复使用变量 courses 太多次并在那里感到困惑。

    在第 9 行,coursesCollection。您可以通过稍微修改以下行来检查这一点:

    print ('Courses 1:', courses)
    

    它将打印:

    Courses 1: Collection(Database(MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True), 'test-database'), 'courses')
    

    现在在上面示例的最后一行之后添加类似的打印语句,例如:

    print ('Courses 2:', courses)
    

    现在将打印:

    Courses 2: <pymongo.cursor.Cursor object at 0x10d284ef0>
    

    这就是错误AttributeError: 'Cursor' object has no attribute 'find' 所说的内容。您正在尝试在 Cursor 对象上调用 find()

    【讨论】:

    • 好的,这就是为什么它只执行一次。有什么方法可以一次又一次地使用 courses = course.find() 进行聚合、排序等处理?
    • 不要重新定义courses,也不要做类似courses = courses.find()的事情。您正在更改 courses 的内容并因此感到困惑。
    猜你喜欢
    • 2020-08-23
    • 2020-12-29
    • 2014-06-05
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 2018-09-23
    • 1970-01-01
    相关资源
    最近更新 更多