Membuat, Mengambil, Memperbarui, dan Menghapus Entity

Objek data di Datastore dikenal sebagai entity, yang masing-masing dikategorikan berdasarkan jenis tertentu untuk tujuan kueri. Misalnya, jika Anda menulis aplikasi sumber daya manusia, Anda dapat mewakili setiap karyawan dengan entity jenis Employee. Perhatikan bahwa nilai data entity tersedia dalam bentuk properti. Untuk mengetahui informasi selengkapnya tentang entity, lihat dokumen konsep Entity, Properti, dan Kunci.

Membuat entity dan menyetel properti

Di Go, Anda membuat entity baru dengan membuat instance struct Go, mengisi kolomnya, dan memanggil datastore.Put untuk menyimpannya ke Datastore. Hanya kolom yang diekspor (dimulai dengan huruf besar) yang akan disimpan ke Datastore. Anda dapat menentukan nama kunci entity dengan meneruskan argumen stringID yang tidak kosong ke datastore.NewKey.

Contoh berikut membuat entity jenis Employee, mengisi nilai propertinya, dan menyimpannya ke Datastore:

import (
	"context"
	"time"

	"google.golang.org/appengine/datastore"
)

type Employee struct {
	FirstName          string
	LastName           string
	HireDate           time.Time
	AttendedHRTraining bool
}

func f(ctx context.Context) {
	// ...
	employee := &Employee{
		FirstName: "Antonio",
		LastName:  "Salieri",
		HireDate:  time.Now(),
	}
	employee.AttendedHRTraining = true

	key := datastore.NewIncompleteKey(ctx, "Employee", nil)
	if _, err := datastore.Put(ctx, key, employee); err != nil {
		// Handle err
	}
	// ...
}

Jenis Employee mendeklarasikan empat kolom untuk model data: FirstName, LastName, HireDate, dan AttendedHRTraining.

Jika Anda memberikan nama kunci kosong, atau menggunakan datastore.NewIncompleteKey, Datastore akan otomatis menghasilkan ID numerik untuk kunci entity:

employee := &Employee{
	FirstName: "Antonio",
	LastName:  "Salieri",
	HireDate:  time.Now(),
}
employee.AttendedHRTraining = true
key := datastore.NewIncompleteKey(ctx, "Employee", nil)
_, err = datastore.Put(ctx, key, employee)

Mengambil entity

Untuk mengambil entity yang diidentifikasi oleh kunci tertentu, teruskan *datastore.Key sebagai argumen ke fungsi datastore.Get. Anda dapat membuat *datastore.Key menggunakan fungsi datastore.NewKey.

employeeKey := datastore.NewKey(ctx, "Employee", "asalieri", 0, nil)
addressKey := datastore.NewKey(ctx, "Address", "", 1, employeeKey)
var addr Address
err = datastore.Get(ctx, addressKey, &addr)

datastore.Get mengisi instance struct Go yang sesuai.

Mengupdate entity

Untuk memperbarui entity yang ada, ubah atribut struktur, lalu panggil datastore.Put. Data menimpa entity yang ada. Seluruh objek dikirim ke Datastore pada setiap panggilan ke datastore.Put.

Menghapus entity

Dengan mempertimbangkan kunci entity, Anda dapat menghapus entity dengan fungsi datastore.Delete:

key := datastore.NewKey(ctx, "Employee", "asalieri", 0, nil)
err = datastore.Delete(ctx, key)

Menghapus entity secara massal

Jika Anda perlu menghapus entity dalam jumlah besar, sebaiknya gunakan Dataflow untuk menghapus entity secara massal.

Menggunakan operasi batch

Anda dapat menggunakan operasi batch berikut jika ingin beroperasi di beberapa entity dalam satu panggilan Datastore:

Berikut adalah contoh panggilan batch:

// A batch put.
_, err = datastore.PutMulti(ctx, []*datastore.Key{k1, k2, k3}, []interface{}{e1, e2, e3})

// A batch get.
var entities = make([]*T, 3)
err = datastore.GetMulti(ctx, []*datastore.Key{k1, k2, k3}, entities)

// A batch delete.
err = datastore.DeleteMulti(ctx, []*datastore.Key{k1, k2, k3})

Operasi batch tidak mengubah biaya Anda. Anda akan dikenai biaya untuk setiap kunci dalam operasi batch, terlepas dari apakah setiap kunci ada atau tidak. Ukuran entity yang terlibat dalam operasi tidak memengaruhi biaya.