Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用pymongo中的游标进行列表理解_Python_Pymongo_List Comprehension - Fatal编程技术网

Python 使用pymongo中的游标进行列表理解

Python 使用pymongo中的游标进行列表理解,python,pymongo,list-comprehension,Python,Pymongo,List Comprehension,这是我的pymongo代码: client = MongoClient('localhost', 27017) db = client['somedb'] collection = db.somecollection return_obj = collection.find({"field1":"red"}) #First print statement print([item['field1'] for item in return_obj]) #Second print state

这是我的pymongo代码:

client = MongoClient('localhost', 27017)
db = client['somedb']
collection = db.somecollection   
return_obj = collection.find({"field1":"red"})

#First print statement
print([item['field1'] for item in return_obj])

#Second print statement
print([item['field1'] for item in return_obj])
第一个print语句生成非空列表,而第二个print语句生成空列表。好像我必须在返回时重置索引


有什么想法吗

这是正确的行为,应该是这样的。变量
return\u obj
是mongoDB cursor,它是python中的一个特殊类,如前所述。使用一次后,光标将“耗尽”。

这是正确的行为,应该是这样的。变量
return\u obj
是mongoDB cursor,它是python中的一个特殊类,如前所述。使用一次后,光标将“耗尽”。

假设光标对象是一个指针(即迭代器),它指向
return\u obj
中的第一项。在使用列表理解(类似于foreach迭代)时进行的每次迭代,该指针都指向返回列表中的下一项。在遍历整个列表后,指针只指向列表的末尾。您可以将其视为非循环链表。 因此,这个游标对象只有一次使用(我只是撒谎,因为你可以重置它,但这对你的理解是最好的)


希望有帮助。

想象光标对象是一个指针(即迭代器),它指向
return\u obj
中的第一项。在使用列表理解(类似于foreach迭代)时进行的每次迭代,该指针都指向返回列表中的下一项。在遍历整个列表后,指针只指向列表的末尾。您可以将其视为非循环链表。 因此,这个游标对象只有一次使用(我只是撒谎,因为你可以重置它,但这对你的理解是最好的)

希望有帮助