2015-07-03 81 views
1

這裏是我的pymongo代碼:用光標列表理解從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

這是正確的行爲,這是它應該如何。您的變量return_obj是mongoDB遊標,它是Python中的一個特殊類,如here所述。使用一次後,光標將「耗盡」。

0

想象一下,遊標對象是一個指針(即迭代器),它指向return_obj中的第一項。在使用列表理解(類似於foreach迭代)時,每次迭代都會經歷一次迭代,該指針指向返回列表中的下一個項目。循環遍歷整個列表後,指針只是指向列表的末尾。你可以看到它是一個非圓形鏈表。 因此,這個遊標對象只有一次性使用(我只是撒謊,因爲你可以重置它,但這對你的理解是最好的)。

希望它有幫助。