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

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 を使用すると、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)

エンティティの一括削除

次のように GCP Console を使用して、デフォルトの名前空間にある、特定の種類のすべてのエンティティか、すべての種類のすべてのエンティティを削除することができます。

  1. Cloud Datastore 管理ページに移動します。
    Cloud Datastore 管理ページに移動
  2. Cloud Datastore 管理機能がまだ有効になっていない場合は、[データストア管理を有効にする] をクリックします。
  3. 削除するエンティティの種類を選択します。
  4. [エンティティの削除] をクリックします。一括削除はアプリケーション内で実行されるため、割り当て量に影響することに注意してください。

一括処理の使用

次のバッチ オペレーションを使用すると、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 スタンダード環境