Go を使用した Google App Engine データストアの ID によるエンティティの取得
Google App Engine データストアを操作する場合、効率的なクエリを実行することが不可欠です特定のエンティティを取得します。このようなクエリの 1 つは「IN 配列」クエリで、ID の配列に基づいてエンティティをフィルタリングできます。
「IN 配列」クエリの実行における課題
Inデータストア API は、「IN」配列フィルターを直接サポートしていません。 datastore.NewQuery("Category").Filter("Id IN", ids) を使用しようとすると、エラーが発生します。
代替アプローチ
while "IN " フィルターは直接利用できません。同じ結果を達成する別のアプローチがあります:
1.反復クエリ
配列内の ID ごとに個別のクエリを実行できます。例:
<code class="go">ids := []int64{1,2,3,4} for _, id := range ids { q := datastore.NewQuery("Category").Filter("Id =", id) }</code>
2.範囲クエリ
ID が連続範囲内にある場合は、「IN」フィルターの代わりに範囲クエリを使用できます。例:
<code class="go">ids := []int64{1,2,3,4} q := datastore.NewQuery("Category").Filter("Id>=", 1).Filter("Id<=", 4)</code>
3. GetMulti 関数
フィルター処理しているプロパティがエンティティ キー自体である場合は、datastore.GetMulti() 関数を使用して、キーの配列で指定されたエンティティのリストを取得できます。例:
<code class="go">keys := make([]*datastore.Key, len(ids)) for i, id := range ids { keys[i] = datastore.NewKey(c, "Category", "", id, nil) } categories := make([]Category, len(keys)) err := datastore.GetMulti(c, keys, categories)</code>
注:
反復クエリは、大きな配列では効率が低下する可能性があります。範囲クエリは連続範囲に適していますが、ギャップはサポートしていません。 GetMulti は、キーによってエンティティを取得するために最適化されています。
以上がGo を使用して Google App Engine データストアで ID によってエンティティを取得する方法: 「IN Array」クエリの代替手段?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。