我有类型A和B的对象,其中A有很多B(一对多)。
我使用它有两个原因
为了适应(1)我需要A成为B的父母。我可以使用这种关系来做(2)查询吗?该查询将是“ANCESTOR IN”过滤器,可能吗?
否则我会以两种方式存储关系,既作为父母,又作为常规财产?
答案 0 :(得分:3)
有no ANCESTOR IN
运算符,只有ANCESTOR IS
- 换句话说,您可以轻松找到一个A
的子项,但不能很多。以下内容将查找属于特定B
的所有A
个实体。
parent_key = db.Key.from_path('A', parent_key_name)
children_of_a = B.all().ancestor(parent_key).fetch(100)
了解App Engine中的所有IN
查询在幕后使用多个查询非常重要。如果您要添加父属性以进行查询,并且您正在使用高复制数据存储区(您应该这样做),那么您还需要了解cross-entity group queries的细微差别 - 它们不会非常一致。因此,如果您在大多数情况下期望一个非常小的父母列表(例如,一个或两个),并且您想要强一致性,那么您可能更好地运行多个祖先查询。如果您通常拥有许多父母,并且最终的一致性正常,请添加您可以查询的属性。