如何过滤GAE查询?

如何过滤GAE查询?,第1张

如何过滤GAE查询

(第一个)问题是:

q :=  datastore.NewQuery("employee")q.Filter("Name =", "Andrew W")

Query.Filter()
返回包含您指定的过滤器的派生查询。您必须存储返回值并持续使用它:

q := datastore.NewQuery("employee")q = q.Filter("Name =", "Andrew W")

或仅一行:

q := datastore.NewQuery("employee").Filter("Name =", "Andrew W")

注意:没有此查询,您执行的查询将没有过滤器,因此将返回所有先前保存的那种实体

"employee"
,其中
"JoeCitizen"
可能是您看到的第一个打印的实体。

对于第一次运行,您很可能会看到0个结果。请注意,由于您不使用Ancestor查询,因此 最终的一致性适用
。开发SDK会模拟高复制数据存储库及其最终一致性,因此

Put()
*** 作后的查询将看不到结果。

如果

time.Sleep()
在进行查询之前先输入少量内容,则会看到预期的结果:

time.Sleep(time.Second)var e2 Employeeq := datastore.NewQuery("employee").Filter("Name=", "Andrew W")// Rest of your pre...

还要注意,在SDK中运行代码可以通过创建如下上下文来模拟 强一致性

c, err := aetest.NewContext(&aetest.Options{StronglyConsistentDatastore: true})

但这当然只是出于测试目的,您不能在生产中这样做。

如果要获得高度一致的结果,请在创建键时指定一个祖先键,然后使用祖先查询。仅当您想要非常一致的结果时才需要祖先键。如果您满意,但可以延迟几秒钟才能显示结果,则不必这样做。还要注意,祖先键不必是现有实体的键,而只是语义。您可以创建任何虚构的密钥。对多个实体使用相同的(虚构的)键会将它们放入同一实体组,并且该组上的祖先查询将保持高度一致。

祖先键通常是一个现有键,通常是从当前用户或帐户派生的,因为它可以轻松创建/计算,并且可以保存/存储一些其他信息,但是如上所述,不必如此。



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5082536.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-11-16
下一篇2022-11-16

发表评论

登录后才能评论

评论列表(0条)

    保存