datastore.NewQuery() を使用して GAE クエリをフィルタリングしようとする場合、結果の派生クエリを元の q に割り当てることが重要です。変数。これにより、指定されたフィルターがクエリに確実に適用されます。この手順を怠ると、不正確な結果や空のクエリ結果が発生する可能性があります。
// Incorrect approach: q := datastore.NewQuery("employee") q.Filter("Name =", "Andrew W") // Filter not applied // Correct approach: q := datastore.NewQuery("employee").Filter("Name =", "Andrew W")
さらに、提供されたコードでは、結果が欠落する問題は、高レプリケーション データストアの特性である結果整合性が原因である可能性があります。開発SDKでシミュレートします。これを解決するには、クエリの前に短い time.Sleep() を導入して、整合性が確立する時間を確保します。
time.Sleep(time.Second) var e2 Employee q := datastore.NewQuery("employee").Filter("Name =", "Andrew W") // Rest of your code...
あるいは、aetest.NewContext() でコンテキストを作成し、設定することで強力な整合性を強制することもできます。 StronglyConsistentDatastore を true に設定します。ただし、これはテスト目的でのみ推奨されており、運用環境では使用できません。
結果整合性を持たない強力な整合性を得るには、祖先キーを使用できます。このキーは架空のものにすることができ、エンティティをエンティティ グループにグループ化するためのメカニズムとしてのみ機能します。このグループに対する祖先クエリでは、強い一貫性のある結果が得られます。
// Create a fictional ancestor key ancestorKey := datastore.NameKey("EmployeeGroup", "", nil) // Create a key with the ancestor key key := datastore.NameKey("Employee", "Andrew W", ancestorKey) // Create an employee entity with the key employee := &Employee{ Name: "Andrew W", // Other fields... } // Put the entity with the ancestor key _, err := datastore.Put(c, key, employee) if err != nil { // Handle error } // Query for entities with the ancestor key q := datastore.NewQuery("Employee").Ancestor(ancestorKey) results, err := q.GetAll(c, &[]Employee{}) if err != nil { // Handle error }
以上がGoogle App Engine データストア クエリを効果的にフィルタリングし、一貫した結果を保証するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。