如何获得推入NDB的新模型的最新条目?
1:如果我使用相同的父键?怎么样?
我看到文档写
其键具有相同根的实体形成实体组或组。 如果实体位于不同的组中,则更改为这些实体 有时可能会出现“乱序”。如果实体是 与你的应用程序的语义无关,那没关系。但如果有的话 实体的变更应该是一致的,您的申请应该是 在创建它们时,它们属于同一组。
这是否意味着,使用相同的父键,顺序是插入顺序?
但是,如何获得最后一个?
2:如果我不使用相同的父键(模型相同)?怎么样?
答案 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。