在Google应用引擎上批量获取子实体?

时间:2010-05-08 17:13:10

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

在Python上的Google App Engine上,我有一个访问实体,其中包含患者的父级。患者可能有多次访问。

我需要在某处设置most_recent_visit(以及一些辅助访问数据)以供稍后查询,可能在Brett Slatkin可能称之为“关系索引实体”的另一个子实体中。

我希望以散装方式这样做:

1. get 100 Patient keys
2. get all Visits that have any of the Patients from 1 as an ancestor
3. go through the Visits and get the latest for each Patient

有没有办法在批量获取中执行第2步?

我知道有一种方法可以从密钥列表批量获取实体,并且有一种方法可以通过其祖先匹配单个实体。

3 个答案:

答案 0 :(得分:3)

数据存储区中没有办法找到您正在寻找的查询类型;这是一个不受支持的联接。第2步将需要100个查询。

您可以在每个患者实体中存储一个访问密钥列表,然后可以根据密钥进行简单批量获取所有这些实体。

答案 1 :(得分:0)

为什么不在患者对象上维护患者就诊密钥列表?您已经知道上次访问,因为它将是添加到列表中的最后一个键。

我的NF探测器像疯了一样,让我觉得这是数据存储的正确解决方案。

答案 2 :(得分:0)

如果您在模型Patient中设置属性Visit - 就像这样:

class Patient(db.Model):
    pass

class Visit(db.Model):
    patient_visited = db.ReferenceProperty(Patient)

每个Patient实体都会有这个自动查询属性visit_set,因此您可以这样查询:

for patient in Patient.all():
    last_visit = patient.visit_set.order('-visited')

并且一切都完成了。 只有101个查询。非常好。