Metadata Datastore

Firestore dalam mode Datastore memberikan akses ke metadata yang mencakup informasi tentang entity group, namespace, jenis entity, properti, dan representasi properti untuk setiap properti. Anda dapat menggunakan metadata, misalnya, untuk membuat penampil datastore kustom untuk aplikasi Anda atau untuk fungsi administratif backend.

Dasbor Datastore di Konsol Google Cloud juga menyediakan beberapa metadata tentang aplikasi Anda, tetapi data yang ditampilkan di sana berbeda dalam beberapa hal penting dengan yang ditampilkan oleh fungsi-fungsi ini.

  • Keaktualan. Membaca metadata menggunakan API akan mendapatkan data saat ini, sedangkan data di dasbor hanya diperbarui sekali sehari.
  • Daftar Isi. Beberapa metadata di dasbor tidak tersedia melalui API; dan sebaliknya.
  • Kecepatan. Aktivitas dan kueri metadata ditagih dengan cara yang sama seperti aktivitas dan kueri datastore. Kueri metadata yang mengambil informasi tentang namespace, jenis, dan properti umumnya lambat untuk dijalankan. Pada dasarnya, perkirakan bahwa kueri metadata yang menampilkan entity N akan memerlukan waktu yang sama seperti N kueri biasa yang masing-masing menampilkan satu entity. Selain itu, kueri representasi properti (kueri properti khusus non-kunci) lebih lambat dari kueri properti khusus kunci. Metadata yang diperoleh metadata entity group agak lebih cepat daripada mendapatkan entity reguler.

Kueri metadata

Tiga jenis entity khusus dicadangkan untuk kueri metadata:

Entity Deskripsi
__namespace__ Digunakan untuk menemukan semua namespace yang digunakan dalam entity aplikasi Anda.
__kind__ Digunakan untuk membuat kueri jenis tertentu.
__property__ Digunakan untuk membuat kueri berdasarkan properti jenis.

Jenis ini tidak akan bertentangan dengan jenis lain dengan nama yang sama yang mungkin sudah ada di aplikasi Anda. Dengan membuat kueri pada jenis khusus ini, Anda dapat mengambil entity yang berisi metadata yang diinginkan.

Entity yang ditampilkan oleh kueri metadata dibuat secara dinamis, berdasarkan status database Anda saat ini. Meskipun Anda dapat membuat objek entity lokal dari jenis __namespace__, __kind__, atau __property__, setiap upaya untuk menyimpannya di database akan gagal.

Kueri namespace

Anda dapat menggunakan kueri namespace untuk menemukan semua namespace yang digunakan dalam entity aplikasi. Dengan begitu, Anda dapat melakukan aktivitas seperti fungsi administratif di beberapa namespace.

Kueri namespace menampilkan entity __namespace__ jenis khusus yang nama kuncinya adalah nama namespace. (Pengecualiannya adalah namespace default yang ditetapkan oleh string kosong "": karena string kosong bukan nama kunci yang valid, namespace ini dikunci dengan ID numerik 1.) Kueri jenis ini hanya mendukung pemfilteran untuk rentang pada properti pseudo khusus __key__, yang nilainya adalah kunci entity. Hasilnya dapat diurutkan berdasarkan nilai __key__ menaik (tetapi tidak menurun). Karena entity __namespace__ tidak memiliki properti, kueri khusus kunci dan non-kunci menampilkan informasi yang sama.

Contoh berikut menampilkan daftar namespace aplikasi dalam rentang antara nilai yang ditetapkan ke variabel startNamespace dan endNamespace:

C#

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat Library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API C# Cloud Datastore.

Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

KeyFactory keyFactory = _db.CreateKeyFactory("__namespace__");
// List all the namespaces between a lower and upper bound.
string lowerBound = _db.NamespaceId.Substring(0,
    _db.NamespaceId.Length - 1);
string upperBound = _db.NamespaceId + "z";
Key startNamespace = keyFactory.CreateKey(lowerBound);
Key endNamespace = keyFactory.CreateKey(upperBound);
Query query = new Query("__namespace__")
{
    Filter = Filter.And(
        Filter.GreaterThan("__key__", startNamespace),
        Filter.LessThan("__key__", endNamespace))
};
var namespaces = new List<string>();
foreach (Entity entity in _db.RunQuery(query).Entities)
{
    namespaces.Add(entity.Key.Path[0].Name);
};

Go

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat Library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Go Cloud Datastore.

Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.


func metadataNamespaces(w io.Writer, projectID string) error {
	// projectID := "my-project"

	ctx := context.Background()
	client, err := datastore.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("datastore.NewClient: %w", err)
	}
	defer client.Close()

	start := datastore.NameKey("__namespace__", "g", nil)
	end := datastore.NameKey("__namespace__", "h", nil)
	query := datastore.NewQuery("__namespace__").
		FilterField("__key__", ">=", start).
		FilterField("__key__", "<", end).
		KeysOnly()
	keys, err := client.GetAll(ctx, query, nil)
	if err != nil {
		return fmt.Errorf("client.GetAll: %w", err)
	}

	fmt.Fprintln(w, "Namespaces:")
	for _, k := range keys {
		fmt.Fprintf(w, "\t%v", k.Name)
	}
	return nil
}

Java

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat Library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Java Cloud Datastore.

Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

KeyFactory keyFactory = datastore.newKeyFactory().setKind("__namespace__");
Key startNamespace = keyFactory.newKey("g");
Key endNamespace = keyFactory.newKey("h");
Query<Key> query =
    Query.newKeyQueryBuilder()
        .setKind("__namespace__")
        .setFilter(
            CompositeFilter.and(
                PropertyFilter.gt("__key__", startNamespace),
                PropertyFilter.lt("__key__", endNamespace)))
        .build();
List<String> namespaces = new ArrayList<>();
QueryResults<Key> results = datastore.run(query);
while (results.hasNext()) {
  namespaces.add(results.next().getName());
}

Node.js

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat Library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Node.js Cloud Datastore.

Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

async function runNamespaceQuery(startNamespace, endNamespace) {
  const startKey = datastore.key(['__namespace__', startNamespace]);
  const endKey = datastore.key(['__namespace__', endNamespace]);

  const query = datastore
    .createQuery('__namespace__')
    .select('__key__')
    .filter(
      and([
        new PropertyFilter('__key__', '>=', startKey),
        new PropertyFilter('__key__', '<', endKey),
      ])
    );

  const [entities] = await datastore.runQuery(query);
  const namespaces = entities.map(entity => entity[datastore.KEY].name);

  console.log('Namespaces:');
  namespaces.forEach(namespace => console.log(namespace));

  return namespaces;
}

PHP

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat Library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API PHP Cloud Datastore.

Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

$query = $datastore->query()
    ->kind('__namespace__')
    ->projection(['__key__'])
    ->filter('__key__', '>=', $datastore->key('__namespace__', $start))
    ->filter('__key__', '<', $datastore->key('__namespace__', $end));
$result = $datastore->runQuery($query);
/* @var array<string> $namespaces */
$namespaces = [];
foreach ($result as $namespace) {
    $namespaces[] = $namespace->key()->pathEnd()['name'];
}

Python

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat Library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Python Cloud Datastore.

Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

from google.cloud import datastore

# For help authenticating your client, visit
# https://cloud.google.com/docs/authentication/getting-started
client = datastore.Client()

# All namespaces
query = client.query(kind="__namespace__")
query.keys_only()

all_namespaces = [entity.key.id_or_name for entity in query.fetch()]

# Filtered namespaces
start_namespace = client.key("__namespace__", "g")
end_namespace = client.key("__namespace__", "h")
query = client.query(kind="__namespace__")
query.key_filter(start_namespace, ">=")
query.key_filter(end_namespace, "<")

filtered_namespaces = [entity.key.id_or_name for entity in query.fetch()]

Ruby

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat Library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Ruby Cloud Datastore.

Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

query = datastore.query("__namespace__")
                 .select("__key__")
                 .where("__key__", ">=", datastore.key("__namespace__", "g"))
                 .where("__key__", "<", datastore.key("__namespace__", "h"))

namespaces = datastore.run(query).map do |entity|
  entity.key.name
end

GQL

SELECT __key__ FROM __namespace__
WHERE __key__ >= KEY(__namespace__, 'namespace-a')
  AND __key__ <  KEY(__namespace__, 'namespace-b')

Kueri jenis

Kueri jenis menampilkan entity jenis __kind__ yang nama kuncinya adalah nama jenis entity. Kueri jenis ini secara implisit dibatasi untuk namespace saat ini dan hanya mendukung pemfilteran untuk rentang melalui properti pseudo __key__. Hasilnya dapat diurutkan berdasarkan nilai __key__ menaik (tetapi tidak menurun). Karena entity __kind__ tidak memiliki properti, kueri khusus kunci dan non-kunci menampilkan informasi yang sama.

Contoh berikut mencetak daftar jenis yang digunakan dalam aplikasi:

C#

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat Library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API C# Cloud Datastore.

Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

Query query = new Query("__kind__");
var kinds = new List<string>();
foreach (Entity entity in _db.RunQuery(query).Entities)
{
    kinds.Add(entity.Key.Path[0].Name);
};

Go

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat Library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Go Cloud Datastore.

Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

query := datastore.NewQuery("__kind__").KeysOnly()
keys, err := client.GetAll(ctx, query, nil)
if err != nil {
	log.Fatalf("client.GetAll: %v", err)
}

kinds := make([]string, 0, len(keys))
for _, k := range keys {
	kinds = append(kinds, k.Name)
}

Java

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat Library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Java Cloud Datastore.

Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

Query<Key> query = Query.newKeyQueryBuilder().setKind("__kind__").build();
List<String> kinds = new ArrayList<>();
QueryResults<Key> results = datastore.run(query);
while (results.hasNext()) {
  kinds.add(results.next().getName());
}

Node.js

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat Library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Node.js Cloud Datastore.

Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

async function runKindQuery() {
  const query = datastore.createQuery('__kind__').select('__key__');

  const [entities] = await datastore.runQuery(query);
  const kinds = entities.map(entity => entity[datastore.KEY].name);

  console.log('Kinds:');
  kinds.forEach(kind => console.log(kind));

  return kinds;
}

PHP

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat Library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API PHP Cloud Datastore.

Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

$query = $datastore->query()
    ->kind('__kind__')
    ->projection(['__key__']);
$result = $datastore->runQuery($query);
/* @var array<string> $kinds */
$kinds = [];
foreach ($result as $kind) {
    $kinds[] = $kind->key()->pathEnd()['name'];
}

Python

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat Library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Python Cloud Datastore.

Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

from google.cloud import datastore

# For help authenticating your client, visit
# https://cloud.google.com/docs/authentication/getting-started
client = datastore.Client()

query = client.query(kind="__kind__")
query.keys_only()

kinds = [entity.key.id_or_name for entity in query.fetch()]

Ruby

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat Library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Ruby Cloud Datastore.

Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

query = datastore.query("__kind__")
                 .select("__key__")

kinds = datastore.run(query).map do |entity|
  entity.key.name
end

GQL

SELECT __key__ FROM __kind__

Kueri properti

Kueri properti menampilkan entity jenis __property__ yang menunjukkan properti terindeks yang terkait dengan jenis entity. (Properti yang tidak diindeks tidak disertakan.) Entity yang mewakili properti p jenis k dibuat sebagai berikut:

  • Kunci entity memiliki jenis __property__ dan nama kunci p.
  • Kunci induk entity memiliki jenis __kind__ dan nama kunci k.
  • Properti array property_representation entity berisi semua representasi properti.

Misalnya, jika database Anda berisi tepat dua entity Task dengan properti name dan done:

Key: 'Task:1'
name: 'Read some properties'
done: true

Key: 'Task:2'
name: 'Climb'
done: null

maka dua entity yang ditampilkan oleh kueri __property__ adalah:

Key: '__kind__:Task/__property__:name'
property_representation: [ 'STRING' ]

Key: '__kind__:Task/__property__:done'
property_representation: [ 'BOOLEAN', 'NULL' ]

Kueri properti secara implisit dibatasi untuk namespace saat ini, dan mendukung pemfilteran terbatas dengan ancestor atau rentang melalui properti pseudo __key__.

Kueri properti khusus kunci lebih efisien daripada kueri khusus non-kunci, karena kueri ini tidak perlu mengumpulkan representasi properti. Contoh berikut mengambil nama semua jenis entity aplikasi dan properti yang terkait dengan masing-masing jenis entity tersebut:

C#

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat Library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API C# Cloud Datastore.

Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

Query query = new Query("__property__");
var properties = new List<string>();
foreach (Entity entity in _db.RunQuery(query).Entities)
{
    string kind = entity.Key.Path[0].Name;
    string property = entity.Key.Path[1].Name;
    if (kind == "Task")
        properties.Add(property);
};

Go

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat Library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Go Cloud Datastore.

Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

query := datastore.NewQuery("__property__").KeysOnly()
keys, err := client.GetAll(ctx, query, nil)
if err != nil {
	log.Fatalf("client.GetAll: %v", err)
}

props := make(map[string][]string) // Map from kind to slice of properties.
for _, k := range keys {
	prop := k.Name
	kind := k.Parent.Name
	props[kind] = append(props[kind], prop)
}

Java

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat Library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Java Cloud Datastore.

Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

Query<Key> query = Query.newKeyQueryBuilder().setKind("__property__").build();
QueryResults<Key> keys = datastore.run(query);
Map<String, Collection<String>> propertiesByKind = new HashMap<>();
while (keys.hasNext()) {
  Key key = keys.next();
  String kind = key.getParent().getName();
  String propertyName = key.getName();
  Collection<String> properties = propertiesByKind.get(kind);
  if (properties == null) {
    properties = new HashSet<>();
    propertiesByKind.put(kind, properties);
  }
  properties.add(propertyName);
}

Node.js

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat Library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Node.js Cloud Datastore.

Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

async function runPropertyQuery() {
  const query = datastore.createQuery('__property__').select('__key__');
  const [entities] = await datastore.runQuery(query);
  // @TODO convert below object to map
  const propertiesByKind = {};

  entities.forEach(entity => {
    const key = entity[datastore.KEY];
    const kind = key.path[1];
    const property = key.path[3];

    propertiesByKind[kind] = propertiesByKind[kind] || [];
    propertiesByKind[kind].push(property);
  });

  console.log('Properties by Kind:');
  for (const key in propertiesByKind) {
    console.log(key, propertiesByKind[key]);
  }

  return propertiesByKind;
}

PHP

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat Library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API PHP Cloud Datastore.

Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

$query = $datastore->query()
    ->kind('__property__')
    ->projection(['__key__']);
$result = $datastore->runQuery($query);
/* @var array<string> $properties */
$properties = [];
/* @var Entity $entity */
foreach ($result as $entity) {
    $kind = $entity->key()->path()[0]['name'];
    $propertyName = $entity->key()->path()[1]['name'];
    $properties[] = "$kind.$propertyName";
}

Python

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat Library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Python Cloud Datastore.

Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

from google.cloud import datastore

# For help authenticating your client, visit
# https://cloud.google.com/docs/authentication/getting-started
client = datastore.Client()

from collections import defaultdict

query = client.query(kind="__property__")
query.keys_only()

properties_by_kind = defaultdict(list)

for entity in query.fetch():
    kind = entity.key.parent.name
    property_ = entity.key.name

    properties_by_kind[kind].append(property_)

Ruby

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat Library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Ruby Cloud Datastore.

Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

query = datastore.query("__property__")
                 .select("__key__")

entities = datastore.run query
properties_by_kind = entities.each_with_object({}) do |entity, memo|
  kind = entity.key.parent.name
  prop = entity.key.name
  memo[kind] ||= []
  memo[kind] << prop
end

GQL

SELECT __key__ FROM __property__

Kueri properti: representasi properti

Kueri properti khusus non-kunci, yang dikenal sebagai kueri representasi properti, menampilkan informasi tambahan tentang jenis nilai yang digunakan untuk setiap properti. Properti property_representation dalam entity yang mewakili properti p dari jenis k adalah array yang berisi semua representasi nilai p dalam entity jenis k.

Setiap nilai memiliki representasi berikut (perhatikan bahwa beberapa jenis nilai memiliki representasi yang sama):

Jenis nilai Representasi
Bilangan bulat INT64
Angka floating-point DOUBLE
Boolean BOOLEAN
String teks STRING
String byte STRING
Tanggal dan waktu INT64
Kunci Datastore REFERENCE
Entity tersemat STRING
Array representasi elemen array
Titik geografis POINT
Null NULL

Contoh berikut menemukan semua representasi properti jenis Task, menggunakan kueri properti ancestor:

C#

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat Library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API C# Cloud Datastore.

Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

Key key = _db.CreateKeyFactory("__kind__").CreateKey("Task");
Query query = new Query("__property__")
{
    Filter = Filter.HasAncestor(key)
};
var properties = new List<string>();
foreach (Entity entity in _db.RunQuery(query).Entities)
{
    string kind = entity.Key.Path[0].Name;
    string property = entity.Key.Path[1].Name;
    var representations = entity["property_representation"]
        .ArrayValue.Values.Select(x => x.StringValue)
        .OrderBy(x => x);
    properties.Add($"{property}:" +
        string.Join(",", representations));
};

Go

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat Library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Go Cloud Datastore.

Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

kindKey := datastore.NameKey("__kind__", "Task", nil)
query := datastore.NewQuery("__property__").Ancestor(kindKey)

type Prop struct {
	Repr []string `datastore:"property_representation"`
}

var props []Prop
keys, err := client.GetAll(ctx, query, &props)

Java

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat Library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Java Cloud Datastore.

Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

Key key = datastore.newKeyFactory().setKind("__kind__").newKey("Task");
Query<Entity> query =
    Query.newEntityQueryBuilder()
        .setKind("__property__")
        .setFilter(PropertyFilter.hasAncestor(key))
        .build();
QueryResults<Entity> results = datastore.run(query);
Map<String, Collection<String>> representationsByProperty = new HashMap<>();
while (results.hasNext()) {
  Entity result = results.next();
  String propertyName = result.getKey().getName();
  List<StringValue> representations = result.getList("property_representation");
  Collection<String> currentRepresentations = representationsByProperty.get(propertyName);
  if (currentRepresentations == null) {
    currentRepresentations = new HashSet<>();
    representationsByProperty.put(propertyName, currentRepresentations);
  }
  for (StringValue value : representations) {
    currentRepresentations.add(value.get());
  }
}

Node.js

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat Library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Node.js Cloud Datastore.

Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

async function runPropertyByKindQuery() {
  const ancestorKey = datastore.key(['__kind__', 'Account']);

  const query = datastore
    .createQuery('__property__')
    .hasAncestor(ancestorKey);
  const [entities] = await datastore.runQuery(query);

  const representationsByProperty = {};

  entities.forEach(entity => {
    const key = entity[datastore.KEY];
    const propertyName = key.name;
    const propertyType = entity.property_representation;

    representationsByProperty[propertyName] = propertyType;
  });

  console.log('Task property representations:');
  for (const key in representationsByProperty) {
    console.log(key, representationsByProperty[key]);
  }

  return representationsByProperty;
}

PHP

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat Library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API PHP Cloud Datastore.

Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

$ancestorKey = $datastore->key('__kind__', 'Task');
$query = $datastore->query()
    ->kind('__property__')
    ->hasAncestor($ancestorKey);
$result = $datastore->runQuery($query);
/* @var array<string,string> $properties */
$properties = [];
/* @var Entity $entity */
foreach ($result as $entity) {
    $propertyName = $entity->key()->path()[1]['name'];
    $propertyType = $entity['property_representation'];
    $properties[$propertyName] = $propertyType;
}
// Example values of $properties: ['description' => ['STRING']]

Python

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat Library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Python Cloud Datastore.

Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

from google.cloud import datastore

# For help authenticating your client, visit
# https://cloud.google.com/docs/authentication/getting-started
client = datastore.Client()

ancestor = client.key("__kind__", "Task")
query = client.query(kind="__property__", ancestor=ancestor)

representations_by_property = {}

for entity in query.fetch():
    property_name = entity.key.name
    property_types = entity["property_representation"]

    representations_by_property[property_name] = property_types

Ruby

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat Library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Ruby Cloud Datastore.

Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

ancestor_key = datastore.key "__kind__", "Task"
query = datastore.query("__property__")
                 .ancestor(ancestor_key)

entities = datastore.run query
representations = entities.each_with_object({}) do |entity, memo|
  property_name = entity.key.name
  property_types = entity["property_representation"]
  memo[property_name] = property_types
end

GQL

SELECT * FROM __property__
WHERE __key__ HAS ANCESTOR KEY(__kind__, 'Task')

Kueri properti: pemfilteran

Kueri properti mendukung pemfilteran ancestor pada kunci __kind__ atau __property__, untuk membatasi hasil kueri ke satu jenis atau properti, seperti yang terlihat dalam kueri representasi properti di atas.

Kueri properti juga dapat difilter dengan rentang pada properti pseudo __key__, dengan kunci menunjukkan entity __kind__ atau __property__. Hasilnya dapat diurutkan berdasarkan nilai __key__ menaik (tetapi tidak menurun). Pemfilteran diterapkan pada pasangan jenis properti, yang diurutkan pertama berdasarkan jenis dan kedua berdasarkan properti. Misalnya, Anda memiliki entity dengan properti berikut:

  • jenis Task dengan properti
    • created
    • priority
    • tags
  • jenis TaskList dengan properti
    • created

Kueri properti khusus kunci berikut:

C#

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat Library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API C# Cloud Datastore.

Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

Key key = _db.CreateKeyFactory("__kind__").CreateKey("Task");
Key startKey = new KeyFactory(key, "__property__")
    .CreateKey("priority");
Query query = new Query("__property__")
{
    Filter = Filter.GreaterThanOrEqual("__key__", startKey)
};
var properties = new List<string>();
foreach (Entity entity in _db.RunQuery(query).Entities)
{
    string kind = entity.Key.Path[0].Name;
    string property = entity.Key.Path[1].Name;
    properties.Add($"{kind}.{property}");
};

Go

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat Library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Go Cloud Datastore.

Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

Tidak Berlaku

Java

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat Library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Java Cloud Datastore.

Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

Key startKey =
    datastore
        .newKeyFactory()
        .setKind("__property__")
        .addAncestors(PathElement.of("__kind__", "Task"))
        .newKey("priority");
Query<Key> query =
    Query.newKeyQueryBuilder()
        .setKind("__property__")
        .setFilter(PropertyFilter.ge("__key__", startKey))
        .build();
Map<String, Collection<String>> propertiesByKind = new HashMap<>();
QueryResults<Key> keys = datastore.run(query);
while (keys.hasNext()) {
  Key key = keys.next();
  String kind = key.getParent().getName();
  String propertyName = key.getName();
  Collection<String> properties = propertiesByKind.get(kind);
  if (properties == null) {
    properties = new HashSet<String>();
    propertiesByKind.put(kind, properties);
  }
  properties.add(propertyName);
}

Node.js

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat Library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Node.js Cloud Datastore.

Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

Tidak Berlaku

PHP

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat Library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API PHP Cloud Datastore.

Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

$ancestorKey = $datastore->key('__kind__', 'Task');
$startKey = $datastore->key('__property__', 'priority')
    ->ancestorKey($ancestorKey);
$query = $datastore->query()
    ->kind('__property__')
    ->filter('__key__', '>=', $startKey);
$result = $datastore->runQuery($query);
/* @var array<string> $properties */
$properties = [];
/* @var Entity $entity */
foreach ($result as $entity) {
    $kind = $entity->key()->path()[0]['name'];
    $propertyName = $entity->key()->path()[1]['name'];
    $properties[] = "$kind.$propertyName";
}

Python

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat Library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Python Cloud Datastore.

Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

Tidak Berlaku

Ruby

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Cloud Datastore, lihat Library klien Cloud Datastore. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Ruby Cloud Datastore.

Untuk melakukan autentikasi ke Cloud Datastore, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

start_key = datastore.key [["__kind__", "Task"], ["__property__", "priority"]]
query = datastore.query("__property__")
                 .select("__key__")
                 .where("__key__", ">=", start_key)

entities = datastore.run query
properties_by_kind = entities.each_with_object({}) do |entity, memo|
  kind = entity.key.parent.name
  prop = entity.key.name
  memo[kind] ||= []
  memo[kind] << prop
end

GQL

SELECT __key__ FROM __property__
WHERE __key__ >= KEY(__kind__, 'Task', __property__, 'priority')

akan mengumpulkan pasangan jenis, nama properti berikut:

Task, priority
Task, tags
TaskList, created

Perhatikan bahwa hasilnya menyertakan properti dari jenis Task dan TaskList, tetapi tidak menyertakan properti created dari jenis Task, karena berada di luar rentang yang ditentukan untuk kueri.