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.

Mengambil satu entity

Untuk mengambil hanya satu entity yang cocok dengan kueri Anda, gunakan metode PreparedQuery.asSingleEntity():

Query q =
    new Query("Person")
        .setFilter(new FilterPredicate("lastName", FilterOperator.EQUAL, targetLastName));

PreparedQuery pq = datastore.prepare(q);
Entity result = pq.asSingleEntity();

Ini akan menampilkan hasil pertama yang ditemukan dalam indeks yang cocok dengan kueri. (Jika ada lebih dari satu hasil yang cocok, TooManyResultsException akan ditampilkan.)

Melakukan iterasi melalui hasil kueri

Saat melakukan iterasi hasil kueri menggunakan metode PreparedQuery.asIterable() dan PreparedQuery.asIterator(), Cloud Datastore mengambil hasilnya dalam batch. Secara default, setiap batch berisi 20 hasil, tetapi Anda dapat mengubah nilai ini menggunakan FetchOptions.chunkSize(). Anda dapat terus melakukan iterasi melalui hasil kueri hingga semua hasil kueri ditampilkan atau waktu permintaan habis.

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, gunakan metode Query.setKeysOnly():

Query q = new Query("Person").setKeysOnly();

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:

private List<Entity> getTallestPeople() {
  DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();

  Query q = new Query("Person").addSort("height", SortDirection.DESCENDING);

  PreparedQuery pq = datastore.prepare(q);
  return pq.asList(FetchOptions.Builder.withLimit(5));
}

Apa langkah selanjutnya?