我怎样才能获得新加入 NDB 的模型的最新条目?
1:如果我使用相同的父键?如何 ?
我看到文件写
其键具有相同根的实体形成一个实体组或组。如果实体位于不同的组中,那么对这些实体的更改有时可能看起来“无序”。如果实体在您的应用程序的语义中不相关,那很好。但是,如果某些实体的更改应该是一致的,那么您的应用程序应该在创建它们时使它们成为同一组的一部分。
这是否意味着,使用相同的父键,订单是插入订单?
但是,如何获得最后一个?
2:如果我不使用相同的父键(型号相同)?如何 ?
我怎样才能获得新加入 NDB 的模型的最新条目?
1:如果我使用相同的父键?如何 ?
我看到文件写
其键具有相同根的实体形成一个实体组或组。如果实体位于不同的组中,那么对这些实体的更改有时可能看起来“无序”。如果实体在您的应用程序的语义中不相关,那很好。但是,如果某些实体的更改应该是一致的,那么您的应用程序应该在创建它们时使它们成为同一组的一部分。
这是否意味着,使用相同的父键,订单是插入订单?
但是,如何获得最后一个?
2:如果我不使用相同的父键(型号相同)?如何 ?
如果您对最终一致性没问题(即您可能不会立即看到最新的),您可以添加一个带有 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()
请注意,我在这里使用了一个全局固定的键名,而持有者类没有父级。这是一个瓶颈;如果您的“最新条目”只需要来自特定的父项,您可能更愿意使用不同的父项创建多个最新持有者实体,在这种情况下,您只需将父键传递给 get_or_insert。