【问题标题】:Use "ANCESTOR IN <list>" in AppEngine query在 AppEngine 查询中使用“ANCESTOR IN <list>”
【发布时间】:2011-08-18 07:49:47
【问题描述】:

我有 A 和 B 类型的对象,其中 A 有许多 B(一对多)。

我使用它有两个原因

  1. 能够在实体组内进行交易
  2. 查找作为 A 对象列表子级的所有 B 对象

为了适应 (1) 我需要 A 成为 B 的父级。我可以使用这种关系来执行 (2) 查询吗?该查询将是一个“ANCESTOR IN”过滤器,这可能吗?

否则我会以两种方式存储关系,既作为父对象,又作为常规属性?

【问题讨论】:

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


    【解决方案1】:

    no ANCESTOR IN 运算符,只有ANCESTOR IS ——换句话说,你可以很容易地找到一个A 的孩子,但不是很多。下面将找到作为特定A 子级的所有B 实体。

    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 的细微差别——它们不会保持高度一致。因此,如果您在大多数情况下期望一个非常小的父列表(例如,一个或两个),并且您想要强一致性,那么您可能会更好地运行多个祖先查询。如果您通常有很多父母,并且最终的一致性是可以的,请添加一个您可以查询的属性。

    【讨论】:

      猜你喜欢
      • 2011-04-27
      • 2014-10-03
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 2012-08-09
      • 1970-01-01
      • 2012-12-28
      相关资源
      最近更新 更多