0

我怎樣才能獲得最新的模型新入NDB?如何獲取新建模型的最新條目到NDB中?

1:如果我使用相同的父鍵?如何 ?

我看到的文檔寫

實體,它的鍵具有相同的根形成實體組或組。 如果實體處於不同的組中,那麼對這些實體 的更改有時可能會「無序」發生。如果實體在您的應用程序的語義中與 無關,那沒問題。但是,如果某些實體的更改應該一致,則創建它們時,應用程序應使它們成爲同一組的一部分。

這就是說,用相同的父鍵順序是插入順序?

但是,如何獲得最後一個?

2:如果我不使用相同的父鍵(模型是相同的)?如何 ?

回答

4

如果你最終一致性OK(即你可能看不到非常最新一出,立即),你只需添加具有auto_now_add =真然後DateTimeProperty的運行查詢由該屬性排序,以獲得最新的一個。 (這也是近似的,因爲您可能將多個實體保存在一起,這些實體的排列順序與您預期的不同)。

如果您需要它是完全正確的,我可以看到的唯一方法是創建一個實體,將持有對最新條目的引用,並在與創建的條目相同的事務中更新該實體。例如:

class LatestHolder(ndb.Model): 
    latest = ndb.KeyProperty('Entry') 

# code to update: 

@ndb.transactional(xg=True) 
def put_new_entry(entry): 
    holder = LatestHolder.get_or_insert(name='fixed-key') 
    holder.latest = entry 
    holder.put() 
    entry.put() 

請注意,我在這裏使用了一個全局固定的密鑰名稱,而父類沒有父類。這是一個瓶頸;如果您的「最新條目」只需要來自特定的父級,那麼您可能更願意使用不同的父級創建多個LatestHolder實體,在這種情況下,您只需將父鍵傳遞給get_or_insert即可。

+0

具有索引auto_now_add = True字段的另一個好處是便於下載數據。我們大量使用這些數據來存儲需要存儲在商業智能數據庫中的數據。您可以非常輕鬆地通過很好的控制隨時隨地分發下載內容。一種查詢遊標管理的客戶端。 Hate不得不爲這樣的事情貢獻一個索引,但是我們喜歡這樣設置,並且使用它很多。 HTH。 – stevep 2013-03-03 18:06:27