在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步?
我知道有一种方法可以从密钥列表批量获取实体,并且有一种方法可以通过其祖先匹配单个实体。
答案 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个查询。非常好。