【问题标题】:app engine query filter by 'id' range of entities, ignoring ancestor(s)应用引擎查询按“id”范围的实体过滤,忽略祖先
【发布时间】:2011-08-07 18:54:22
【问题描述】:

我有这样的实体:

实体 [products(147)]
实体[制造商(23)/产品(131)]
实体[制造商(17)/产品(131)]

现在,我正在尝试使用 Query 查找 ID 为 100 及以上的所有类型“产品”的实体。像上面的 147 和 131。

问题是我不知道如何要求这些,在查询中“分离”祖先。

试过这些:

不工作

SELECT __key__ FROM products WHERE ID >= 100

部分工作

SELECT __key__ FROM products WHERE __key__ >= 100

这就是我插入查询过滤器的方式:

query.addFilter("__key__", FilterOperator.GREATER_THAN_OR_EQUAL, KeyFactory.createKey("products", 100));

这个部分工作的只为“根”实体提供正确的结果,即没有祖先的实体。

有什么方法可以修改它以使其忽略祖先?谢谢!

【问题讨论】:

  • 注意:我知道我可能会得到具有相同 ID(但祖先不同)的实体。没关系。

标签: java google-app-engine


【解决方案1】:

没有内置的方法可以做到这一点,因为这个查询是没有意义的。 ID 的分配方式使得它们对于给定的种类和父母是唯一的。如果实体可能有不同的父实体,您不能仅依靠 ID 来唯一标识一个实体,因此无论父实体如何查询一系列 ID 都是毫无意义的。

【讨论】:

  • “无意义”一词取决于。对我来说,这个要求很有意义。无论如何,实际上正如我在“Kindless Queries”下的文档中看到的那样,可以要求“任何东西”。这意味着具有相同 ID 的同类实体是可检索的。好吧,我想我必须以某种方式处理它,或者找到解决方法,希望如此。
  • 顺便说一句,尼克,当我执行两个查询时,一个使用 ASC 排序,另一个使用 key 上的 DEC 排序,并且没有过滤器,它给了我所有忽略祖先的实体。也许是副作用?顺便说一句,我希望我也可以通过这种方式过滤这些查询。
  • @Poni 这是预期的行为 - 键是有效的路径,因此它们将按这些路径排序。鉴于 ID 在具有不同父级的实体之间不是唯一的,为什么要这样过滤?如果你真的需要这样做,你必须在你的模型中添加一个只包含 ID 的属性,并将其编入索引。
  • Ping... 那么您是否设法解决了这个问题?我也有同样的问题。
猜你喜欢
  • 2015-02-14
  • 2023-03-12
  • 1970-01-01
  • 2020-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-17
  • 2021-09-13
相关资源
最近更新 更多