GAE クエリのフィルタリング
GAE クエリをフィルタリングしようとすると、フィルタが効果がないと思われるときに一般的な問題が発生します。この問題に対処するには、Query.Filter() メソッドがどのように動作するかを理解することが重要です。
Query.Filter() メソッドは、指定されたフィルターを含む派生クエリを返します。ただし、フィルターを保持するには、戻り値を新しい変数に代入することが重要です。
q = datastore.NewQuery("employee").Filter("Name =", "Andrew W")
または、新しいフィルター処理は 1 行で実現できます。
q := datastore.NewQuery("employee").Filter("Name =", "Andrew W")
Withoutこのステップでは、実行されたクエリにはフィルターがないため、保存されているすべての「従業員」エンティティが取得されます。その結果、「Joe Citizen」が最初に印刷されるエンティティになる可能性があります。
さらに、最終的な整合性を考慮する必要があります。 Put() 操作を実行した後、開発 SDK を使用しているため、後続のクエリで予期した結果がすぐに表示されない場合があります。この問題を軽減するために、クエリを実行する前に time.Sleep() を導入できます:
time.Sleep(time.Second) q := datastore.NewQuery("employee").Filter("Name =", "Andrew W")
実稼働環境では、次のオプションを使用してコンテキストを作成することで強整合性をシミュレートできます:
c, err := aetest.NewContext(&aetest.Options{StronglyConsistentDatastore: true})
ただし、本番環境で強い一貫性のある結果を得るには、祖先キーを利用する必要があることに注意することが重要です。
以上がGoogle App Engine データストア クエリが正しくフィルタリングされないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。