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