Вы отметили, что используете pymongo, поэтому я дам вам два примера pymongo с использованием курсора в качестве итератора:
import pymongo
cursor = pymongo.Connection().test_db.test_collection.find()
for item in cursor:
print item
#this will print the item as a dictionary
и
import pymongo
cursor = pymongo.Connection().test_db.test_collection.find()
results = [item['some_attribute'] for item in cursor]
#this will create a list comprehension containing the value of some_attribute
#for each item in the collection
InКроме того, вы можете установить размер пакетов, возвращаемых драйверу pymongo, выполнив следующее:
import pymongo
cursor = pymongo.Connection().test_db.test_collection.find()
cursor.batchsize(20) #sets the size of batches of items the cursor will return to 20
Обычно нет необходимости связываться с размером пакета, но если на машине, на которой вы запускаете драйвер, естьПроблемы с памятью и сбой страницы, когда вы манипулируете результатами запроса, вам, возможно, придется установить это значение для достижения лучшей производительности (для меня это действительно кажется болезненной оптимизацией, и я всегда оставляю значение по умолчанию).
Что касается драйвера javascript (драйвера, который загружается при запуске «оболочки»), то эта часть документации предостерегает вас от использования «режима массива».Из интерактивного руководства:
Режим массива в оболочке
Обратите внимание, что в некоторых языках, таких как JavaScript, драйвер поддерживает «режим массива».Пожалуйста, проверьте подробности в документации к вашему драйверу.
В оболочке db, чтобы использовать курсор в режиме массива, используйте операции индекса массива [] и свойство length.
Режим массива загрузит все данныев оперативную память до самого высокого запрошенного индекса.Таким образом, его не следует использовать для любого запроса, который может возвращать очень большие объемы данных: вам не хватит памяти на клиенте.
Вы также можете вызвать toArray () для курсора.toArray () загрузит все запросы объектов в оперативную память.