用pymongo的光标列出理解

时间:2015-07-03 19:25:02

标签: 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 statement
print([item['field1'] for item in return_obj])

第一个print语句产生非空列表,而第二个产生空列表。好像我必须在return_obj上重置一个索引。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

这是正确的行为,这是应该如何。你的变量return_obj是mongoDB游标,它是python中的一个特殊类,如here所述。使用一次后,光标“耗尽”。

答案 1 :(得分:1)

想象一下,游标对象是一个指针(即迭代器),它指向return_obj中的第一个项目。在使用列表推导时(与foreach迭代类似),您经历的每次迭代,指针指向返回列表中的下一个项目。循环遍历整个列表后,指针只指向列表的末尾。您可以将其视为非圆形链接列表。 因此,这个游标对象只是一次性使用(我只是撒谎,因为你可以重置它,但这最适合你的理解)。

希望它有所帮助。