【问题标题】:Low level AppEngine Query on Key + Ancestor键 + 祖先的低级 AppEngine 查询
【发布时间】:2012-06-14 22:38:08
【问题描述】:

这个 AppEngine 任务看起来应该是微不足道的,但我还没有完全解决。因此,我在 GrandParent/Parent/Child 关系中有一些数据:

EntityName  Key
----------- -------
GrandParent W
GrandParent X
Parent      W.A
Parent      X.A
Parent      X.B
Child       W.A.i
Child       X.A.i
Child       X.A.ii    <=== matches X.*.ii
Child       X.A.iii
Child       X.B.i
Child       X.B.ii    <=== matches X.*.ii

我正在尝试构建一个查询,该查询与所有具有键 X.*.ii 的子项匹配。换句话说,它将从上面返回键 X.A.ii 和 X.B.ii,仅此而已。我正在使用低级查询机制,到目前为止我所拥有的是这样的:

Entity gpX = new Entity("GrandParent","X");
Query q = new Query("Child");
q.setAncestor(gpX.getKey());

返回五个孩子。如果 i/ii/iii 属性是属性而不是键,这将是微不足道的,但它是键,我不清楚如何指定 'ii' 是搜索条件。

【问题讨论】:

    标签: google-app-engine ancestor low-level-api


    【解决方案1】:

    如果没有单独的属性,就无法做到这一点。 App Engine 数据存储区中的所有过滤器都必须是相等或范围测试(相当于字符串前缀测试);使用单个过滤器无法按照您描述的方式进行过滤。

    【讨论】:

    • 但是如果“ii”在属性 Child.Foo 中,我不能通过 q.setFilter("Foo","ii") 执行此操作吗?假设是这种情况,我的问题似乎会减少到将 Child.Key 标识为过滤器字段而不是 Child.Foo。
    • 是的。这就是为什么我的回答以“没有单独的财产就无法做到这一点”开头。密钥伪属性包含整个密钥,而不仅仅是您尝试过滤的 ID/名称。
    猜你喜欢
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    • 2017-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多