Fan*_*sim 4 string google-app-engine gql go google-cloud-datastore
我想搜索名称以特定字符串开头的所有实体,这在数据存储中可能吗?
我试过这个:
q = datastore.NewQuery("Places").Filter("Name > ", "a")
Run Code Online (Sandbox Code Playgroud)
但这不起作用。
如果这是不可能的,您可以向我建议什么替代解决方案?大查询?App Engine 上的 BigTable 或其他服务?
这是可能的,但需要结合两个不等式滤波器。
假设您想要列出Places具有"li"前缀的列表。这可以用一个查询来描述,该查询Places列出大于(或等于)"li" 和小于前缀的前缀,该前缀是"li"按字典顺序排列的下一个字符串:"lj"。
GQL 如下所示:
SELECT * FROM Places WHERE Name > 'li' AND Name < 'lj'
Run Code Online (Sandbox Code Playgroud)
在 Go 中编码如下:
q = datastore.NewQuery("Places").Filter("Name >", "li").Filter("Name <", "lj")
Run Code Online (Sandbox Code Playgroud)
这将列出Places名称的位置,例如:
liam
lisotto
lizst
Run Code Online (Sandbox Code Playgroud)
但会排除以下名称:
abc
ljoi
lj
qwerty
Run Code Online (Sandbox Code Playgroud)
需要注意的一件事:小写字母和大写字母在字典顺序上是不同的,因此例如"List"小于"li"(即使"list"大于"li")!