クエリ結果の取得

クエリを作成した後、複数の取得オプションを指定し、返す結果をさらに制御できます。 アプリに対するクエリの構成の詳細については、データストア クエリをご覧ください。

クエリ結果の反復処理

Query 値 の Run メソッドを使用してクエリ結果を反復処理する場合、Cloud Datastore は結果を一括取得します。デフォルトでは、各バッチに 20 の結果が含まれています。すべての結果が返されるかリクエストがタイムアウトするまでクエリ結果の反復処理を繰り返すことができます。

クエリと一致する各エンティティを反復処理する場合、Run メソッドを使用して Iterator を取得します。それによって、IteratorNext メソッドを使用して各エンティティをステップスルーできます。

q := datastore.NewQuery("Person")
t := q.Run(ctx)
for {
	var p Person
	k, err := t.Next(&p)
	if err == datastore.Done {
		break // No further entities match the query.
	}
	if err != nil {
		log.Errorf(ctx, "fetching next Person: %v", err)
		break
	}
	// Do something with Person p and Key k
	doSomething(k, p)
}

クエリと一致するすべてのエンティティを同時に取得するには、GetAll メソッドを使用します。

q := datastore.NewQuery("Person")
var people []Person
keys, err := q.GetAll(ctx, &people)
if err != nil {
	log.Errorf(ctx, "fetching people: %v", err)
	return
}
for i, p := range people {
	k := keys[i]
	// Do something with Person p and Key k
	doSomething(k, p)
}

エンティティから選択したプロパティを取得する

エンティティ全体ではなく、選択したプロパティのみを取得する場合、プロジェクション クエリを使用します。このタイプのクエリはエンティティ全体を返すよりも迅速かつ低コストで実行できます。

Similarly, a keys-only query saves time and resources by returning just the keys to the entities it matches, rather than the full entities themselves. このタイプのクエリを作成するには、Query を作成するときにKeysOnly メソッド呼び出します。

q := datastore.NewQuery("Person").KeysOnly()

クエリに上限を設定する

クエリに対して上限 を設定することで、1 バッチで返される結果の最大数を制御できます。次の例では、最も背の高い 5 名を Cloud Datastore から取得します。

q := datastore.NewQuery("Person").Order("-Height").Limit(5)
var people []Person
_, err := q.GetAll(ctx, &people)
// check err

for _, p := range people {
	log.Infof(ctx, "%s %s, %d inches tall", p.FirstName, p.LastName, p.Height)
}

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Go の App Engine スタンダード環境