Mengambil hasil kueri

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

Melakukan iterasi melalui hasil kueri

Saat melakukan iterasi hasil kueri menggunakan metode Run dari nilai Query , Datastore mengambil hasilnya dalam batch. Secara default, setiap batch berisi 20 hasil. Anda dapat melanjutkan iterasi hasil kueri hingga semua hasil ditampilkan atau permintaan waktunya 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 membuat 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 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?