【发布时间】:2014-08-14 19:36:33
【问题描述】:
我最近在 GAE 上搞砸了,发现它在他们的数据存储 API 中错过了基本的 !=(不等于)过滤器。
https://developers.google.com/appengine/docs/go/datastore/queries#Go_Property_filters
它也没有“或”条件操作数。
谁能告诉我如何过滤不等于某物的数据?
【问题讨论】:
标签: google-app-engine go
我最近在 GAE 上搞砸了,发现它在他们的数据存储 API 中错过了基本的 !=(不等于)过滤器。
https://developers.google.com/appengine/docs/go/datastore/queries#Go_Property_filters
它也没有“或”条件操作数。
谁能告诉我如何过滤不等于某物的数据?
【问题讨论】:
标签: google-app-engine go
即使是具有“!=”过滤器的语言实际上也将其分解为两个不等式过滤器(一个>和一个
select * from table where param != "test"
等于
select * from table where param > "test"
与结果合并
select * from table where param
不理想,但考虑到平台的限制......我认为这是你唯一的选择。
【讨论】:
在您链接的页面中,实际上有一个如何进行此类查询的示例。
不等式过滤器仅限于一个属性
为避免扫描整个索引表,查询机制依赖于所有查询的潜在结果在索引中彼此相邻。为满足此约束,单个查询不得在其所有过滤器中对多个属性使用不等式比较(、>=)。例如,以下查询是有效的,因为两个不等式过滤器都适用于同一个属性:
q := datastore.NewQuery("Person").
Filter("BirthYear >=", minBirthYear).
Filter("BirthYear <=", maxBirthYear)
【讨论】:
datastore.NewQuery("P").Filter("Prop >", key).Filter("Prop <", key)。就像@Julldar 的回答一样。