高效的 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中文网其他相关文章!