Python yield 迭代訪問mongo

2021-08-14 17:47:15 字數 882 閱讀 9844

mongo中使用limit()方法來讀取指定數量的資料,使用skip()方法來跳過指定數量的資料。但skip時是一條條遍歷過來的,在資料量較大時,skip效能堪憂。慢的根本原因在於:「索引所依賴的b+結構不能用於排名計算」。

在某些需要遍歷全表分段取資料的場景,我們可以暫存乙個_id,通過yield的方式來訪問mongo集合,規避skip的使用。

# 迭代方式訪問mongo

deffind_iter

(collcetion, limit=100, spec={}):

min_id = list(collcetion.find(spec).sort('_id', 1).limit(1))[0]['_id']

max_id = list(collcetion.find(spec).sort('_id', -1).limit(1))[0]['_id']

# return first row

curr_id = min_id

spec.update(})

_row = collcetion.find_one(spec)

yield _row

if curr_id == max_id:

raise stopiteration

# return left data

while

true:

spec.update(})

for _row in collcetion.find(spec).sort('_id').limit(limit):

curr_id = _row['_id']

yield _row

if curr_id == max_id:

raise stopiteration

python yield 學習筆記

學習yield之前,了解了迭代器,生成器的概念。沒有太多的細化。迭代器物件 支援iter和next 方法,其中iter 方法返回迭代物件本身 next 方法返回容器的下乙個元素,在結尾時印發stopiteration異常。生成器是迭代器,但是只能遍歷一次。yield返回的就是生成器。看例項,銀行生成...

python yield用法,簡單

學習python的過程過程彙總,經常會遇到yield,但是經常是懵逼的狀態,到底是怎麼用的,自己寫了乙個函式後就明白了,其實很簡單,看下面就懂了。函式中yield用法def yield tst n while n 20 yield 返回 遇到yield就返回yield後面的值,相當於return 返...

python yield 簡單理解

要想理解yield的概念,我們必須理解python中迭代器和生成器的概念與作用。1.迭代器 iterables python中可以直接作用於for迴圈的物件,比如 列表 元祖 字典 集合 字串等統稱為可迭代物件。迭代器是乙個實現了迭代器協議的物件,其可以呼叫next 方法得到下乙個結果,在結果末尾呼...