使用父子关系,其中父级可以拥有子级,而每个子级只有一个父级,是否使用Children.all().ancestor(parent.key)
通过在构造函数中设置parent = parent.key来构建子级的良好解决方案?这种查询是否适用1000限制?
答案 0 :(得分:2)
查询返回您期望的内容,所有具有指定父级的子项在其祖先中的任何位置。查询表达了这一点,所以我怀疑有一种更简单的方法可以做同样的事情。但是App Engine不断添加功能并让我感到惊讶: - )
可能你需要parent.key()
,我认为这取决于你是使用Python还是Java。
顺便说一下,建议不要使用祖先 - 父子对模型中的关系进行建模。存在实体组以启用事务,而不是用作“免费”ReferenceProperty。 parent-child应该是一个低级实现细节,意思是“这两个实体可能需要在单个事务中修改”,或者“我正在播放一个优化技巧,它允许我使用列表属性而无需加载当我得到实体时列入内存“。根据经验,如果实体并非都属于同一个用户,那么它们不应该与父子相关,因为当不同用户尝试通过不同的数据存储节点修改它们时,以这种方式关联它们会引入争用:
答案 1 :(得分:2)
另一种获取我刚刚发现的Google App Engine中父实体的后代(子级)的方法:
childrenEntities = db.query_descendants(parentEntity).fetch(1000)
不确定它是否对您有所帮助。这对我很有帮助,因为我很难弄清楚如何访问使用我安装的python模块创建的子类。
正如其他人在其他地方指出的那样,the 1000 limit for everything was removed in February 2010。有关详细信息,请参阅链接的博客条目:此。