【问题标题】:Google App Engine datastore for Go does not have != filter适用于 Go 的 Google App Engine 数据存储区没有 != 过滤器
【发布时间】:2014-08-14 19:36:33
【问题描述】:

我最近在 GAE 上搞砸了,发现它在他们的数据存储 API 中错过了基本的 !=(不等于)过滤器。

https://developers.google.com/appengine/docs/go/datastore/queries#Go_Property_filters

它也没有“或”条件操作数。

谁能告诉我如何过滤不等于某物的数据?

【问题讨论】:

    标签: google-app-engine go


    【解决方案1】:

    即使是具有“!=”过滤器的语言实际上也将其分解为两个不等式过滤器(一个>和一个

    select * from table where param != "test"

    等于

    select * from table where param > "test"

    与结果合并

    select * from table where param

    不理想,但考虑到平台的限制......我认为这是你唯一的选择。

    【讨论】:

    • 我认为这是目前唯一的方法。由于它缺少“或”操作数,我必须引导两个数据库查询才能做到这一点,这并不好。由于缺少这些基本操作数,我不得不建议不要将 GAE 用于 Go 项目。
    • @Keyang 是的,它仍然是实验性的。我个人会等到他们更正式:/
    • 一个重要的部分是目前 OR 和 != 完全在客户端库中通过组合查询来实现。因此,如果您实现自己的 OR 运算符,它将与其他语言的库中“内置”的运算符完全一样。我不会让这影响你使用哪种语言。
    • 我在 NodeJS 中遇到了同样的问题。由于没有“或”运算符,因此必须在单独的查询中收集结果,然后合并。以下是关于我如何通过在 NodeJS 中重新发明轮子来实现“或”条件的一些细节。 stackoverflow.com/questions/47437166/…
    【解决方案2】:

    在您链接的页面中,实际上有一个如何进行此类查询的示例。

    来自Restrictions on queries

    不等式过滤器仅限于一个属性

    为避免扫描整个索引表,查询机制依赖于所有查询的潜在结果在索引中彼此相邻。为满足此约束,单个查询不得在其所有过滤器中对多个属性使用不等式比较(、>=)。例如,以下查询是有效的,因为两个不等式过滤器都适用于同一个属性:

    q := datastore.NewQuery("Person").
            Filter("BirthYear >=", minBirthYear).
            Filter("BirthYear <=", maxBirthYear)
    

    【讨论】:

    • 我认为它试图说明不等式过滤器,即 >、=、
    • 不,你这样做!= 使用datastore.NewQuery("P").Filter("Prop &gt;", key).Filter("Prop &lt;", key)。就像@Julldar 的回答一样。
    • datastore.NewQuery("P").Filter("Prop >", key).Filter("Prop developers.google.com/appengine/docs/go/datastore/…。正如我所提到的,它没有“或”操作数,所以我们不能使用这个解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多