エンティティの作成、取得、更新、削除

Google Cloud Datastore 内のデータ オブジェクトは「エンティティ」と呼ばれ、個々のエンティティはクエリのために特定の「種類」で分類されます。たとえば、人事アプリケーションを作成している場合は、Employee という種類のエンティティを使用して各従業員を表現できます。エンティティ データ値は、プロパティの形で表されます。エンティティの詳細については、エンティティ、プロパティ、キーを参照してください。

エンティティの作成とプロパティの設定

Go で新しいエンティティを作成するには、Go 構造体のインスタンスを作成し、そのフィールドに値を設定したうえで、datastore.Put を呼び出して Cloud Datastore に保存します。Cloud Datastore にはエクスポートされたフィールド(大文字で始まるもの)のみが保存されます。エンティティのキー名を指定するには、空でない stringID 引数を datastore.NewKey に渡します。

次の例では、種類が Employee であるエンティティを作成し、プロパティ値を設定した後、Cloud Datastore に保存します。

import (
	"time"

	"golang.org/x/net/context"

	"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
	}
	// ...
}

Employee 型は、データモデルに FirstNameLastNameHireDateAttendedHRTraining の 4 つのフィールドを宣言します。

空のキー名を指定するか、または datastore.NewIncompleteKey を使用すると、Cloud Datastore によって自動的にエンティティのキーとして数値 ID が生成されます。

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

エンティティの取得

指定したキーで識別されるエンティティを取得するには、*datastore.Key を引数として datastore.Get 関数に渡します。*datastore.Key を生成するには、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 は適切な Go 構造体のインスタンスを設定します。

エンティティの更新

既存のエンティティを更新するには、構造体の属性を変更してから、datastore.Put を呼び出します。このデータで既存のエンティティが上書きされます。datastore.Put を呼び出すたびに、オブジェクト全体が Cloud Datastore に送信されます。

エンティティの削除

エンティティのキーがわかっていれば、datastore.Delete 関数でエンティティを削除できます。

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

エンティティの一括削除

多数のエンティティを削除する必要がある場合は、Cloud Dataflow を使用してエンティティを一括削除することをおすすめします。

一括処理の使用

次のバッチ オペレーションを使用すると、1 回の Cloud Datastore の呼び出しで複数のエンティティを操作できます。

バッチ呼び出しの例を次に示します。

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

一括オペレーションを実行してもコストは変わりません。キーが存在するかどうかにかかわらず、一括オペレーションに含まれるすべてのキーについて課金されます。オペレーションに含まれるエンティティのサイズは、コストに影響しません。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Go の App Engine スタンダード環境