クエリ結果の取得

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

クエリ結果を反復処理する

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)
}

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

エンティティ全体ではなく、エンティティのプロパティの中から選択したものだけを取得するには、射影クエリを使用します。このタイプのクエリは、エンティティ全体を返すよりも迅速かつ低コストで実行できます。

同様に、キーのみのクエリはエンティティ全体ではなく、一致するエンティティに対応するキーのみを返すことで時間とリソースを節約します。このタイプのクエリを作成するには、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 スタンダード環境