如何获取放入NDB的新模型的最新条目?

时间:2013-03-02 16:49:59

标签: google-app-engine google-cloud-datastore app-engine-ndb

如何获得推入NDB的新模型的最新条目?

1:如果我使用相同的父键?怎么样?

我看到文档写

  

其键具有相同根的实体形成实体组或组。   如果实体位于不同的组中,则更改为这些实体   有时可能会出现“乱序”。如果实体是   与你的应用程序的语义无关,那没关系。但如果有的话   实体的变更应该是一致的,您的申请应该是   在创建它们时,它们属于同一组。

这是否意味着,使用相同的父键,顺序是插入顺序?

但是,如何获得最后一个?

2:如果我不使用相同的父键(模型相同)?怎么样?

1 个答案:

答案 0 :(得分:4)

如果您对最终的一致性没有问题(即您可能没有立即看到 very 最新的一致性),您只需添加带有auto_now_add = True的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。