首页 > 后端开发 > Golang > 为什么我的 Google App Engine 查询不能正确过滤?

为什么我的 Google App Engine 查询不能正确过滤?

DDD
发布: 2025-01-01 04:48:11
原创
597 人浏览过

Why Aren't My Google App Engine Queries Filtering Correctly?

高效的 GAE 查询过滤

本文解决了过滤 Google App Engine (GAE) 查询时遇到的常见问题。当过滤器似乎没有生效时,就会出现问题,导致意外的搜索结果。

考虑提供的代码片段:

q := datastore.NewQuery("employee")
q.Filter("Name =", "Andrew W")
登录后复制

在此示例中,目标是检索具有特定名称属性“Andrew W”的实体。但是,查询未按预期运行。要解决此问题,了解 Query.Filter() 返回应用了过滤器的派生查询至关重要。因此,正确的方法是存储和使用 Query.Filter() 的返回值。

q := datastore.NewQuery("employee").Filter("Name =", "Andrew W")
登录后复制
登录后复制

或者,为了简洁起见,可以将其写在一行中:

q := datastore.NewQuery("employee").Filter("Name =", "Andrew W")
登录后复制
登录后复制

另一个需要考虑的重要因素是最终一致性,它会影响 GAE 开发 SDK 中的数据存储操作。这意味着在 Put() 操作之后立即执行的查询可能不会立即返回保存的实体。为了解决这个问题,可以在运行查询之前引入短暂的延迟。

time.Sleep(time.Second)

var e2 Employee
q := datastore.NewQuery("employee").Filter("Name=", "Andrew W")
// Rest of the code...
登录后复制

为了获得高度一致的结果,请考虑在创建密钥时使用祖先密钥。除非需要高度一致的结果,否则祖先键不是强制性的。如果结果的一些延迟是可以接受的,则不需要祖先键。

请记住,祖先键可以是仅用于语义的虚构键,不需要表示现有实体。分配了相同祖先键的实体形成一个实体组,并且对该组的祖先查询将是强一致的。

以上是为什么我的 Google App Engine 查询不能正确过滤?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板