ホームページ  >  記事  >  バックエンド開発  >  Go を使用して Google App Engine データストアで ID によってエンティティを取得する方法: 「IN Array」クエリの代替手段?

Go を使用して Google App Engine データストアで ID によってエンティティを取得する方法: 「IN Array」クエリの代替手段?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-26 12:50:02354ブラウズ

How to Retrieve Entities by IDs in Google App Engine Datastore with Go: Alternatives to

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。