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