Mengambil hasil kueri

Setelah mengonstruksi kueri, Anda dapat menentukan sejumlah opsi pengambilan untuk mengontrol lebih lanjut hasil yang ditampilkan. Lihat kueri datastore untuk informasi selengkapnya tentang membuat struktur kueri untuk aplikasi Anda.

Melakukan iterasi melalui hasil kueri

Saat melakukan iterasi melalui hasil kueri menggunakan metode Run dari nilai Query, Cloud Datastore mengambil hasilnya dalam batch. Secara default, setiap batch berisi 20 hasil. Anda dapat terus melakukan iterasi melalui hasil kueri hingga semua hasil kueri ditampilkan atau waktu permintaan habis.

Untuk melakukan iterasi pada setiap entity yang cocok dengan kueri Anda, gunakan metode Run untuk mendapatkan Iterator, yang dapat digunakan untuk menelusuri setiap entity menggunakan metode Next Iterator.

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

Untuk mengambil sekaligus semua entity yang cocok dengan kueri Anda, gunakan metode 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)
}

Mengambil properti yang dipilih dari entity

Untuk hanya mengambil properti entity yang dipilih, bukan seluruh entity, gunakan kueri proyeksi. Jenis kueri ini berjalan lebih cepat dan biayanya lebih murah dibandingkan kueri yang menampilkan entity lengkap.

Demikian pula, kueri khusus kunci menghemat waktu dan resource dengan hanya menampilkan kunci ke entity yang cocok, bukan entity lengkap. Untuk membuat jenis kueri ini, panggil metode KeysOnly saat mengonstruksi Query.:

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

Menetapkan batas untuk kueri Anda

Anda dapat menentukan batas kueri untuk mengontrol jumlah maksimum hasil yang ditampilkan dalam satu batch. Contoh berikut mengambil lima orang tertinggi dari 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)
}

Apa langkah selanjutnya?