2010-10-23 23 views
4

我正在嘗試使用AppEngine-MapReduce。我知道如何對某個entity_kind的所有實體執行操作,但是當實體具有date屬性時,僅對數據範圍上的實體進行操作最簡單的方法是什麼?有沒有簡單的方法將參數傳遞給映射器?在Google App Engine上使用AppEngine-MapReduce,分析特定日期範圍實體的最簡單方法是什麼?

例如,如果我只是想刪除的實體,其中:

entity.created >= start and entity.created < stop 

class Entity(db.Model): 
    created = db.DateTimeProperty() 

from mapreduce import operation as op 
def process(entity): 
    yield op.db.Delete(entity) 

回答

3

目前還沒有辦法迭代中映射縮減查詢 - 你必須給定類型的每個實體迭代。相反,您應該在地圖功能中應用過濾器,並且只刪除匹配的實體。

+0

如果我創建了一個名爲DateRange的簡單模型,其中每個實體都有DateRange.start和DateRange.stop,該怎麼辦?然後,我可以在所有DateRange實體上執行映射縮減,並將我的其他模型從entity.start提取到entity.stop。例如:def process(entity):someEntities = SomeModel.all()。filter('date> =',entity.start).filter('date <',entity.stop)好像這是最簡單的方法使用當前的實現來查看特定的日期範圍。在此先感謝尼克。 – Chris 2010-10-23 10:46:56

+2

當然,但是您正在複製大部分mapreduce的分片邏輯來生成日期範圍。但是,如果您只想刪除符合特定條件的記錄,則可能需要考慮將遊標與key_only查詢和任務隊列結合使用。 – 2010-10-23 12:06:41

+0

我同意。刪除記錄只是一個簡單的例子,看看我是否可以在特定日期範圍內執行操作,而不是在所有實體上執行操作。 – Chris 2010-10-25 00:34:42

0

由於commit324有可能使用有限的查詢過濾器作爲輸入。

如果這樣做不會讓你做你想做的事情,那麼你可能想嘗試一下small extension

相關問題