数据存储区查询

本文中的查询是指从 Datastore 模式 Firestore 中检索满足一组指定条件的实体的过程。

您可以对给定种类的实体执行查询,并针对实体的属性值、键和祖先实体指定过滤条件;查询可以返回零个或零个以上实体作为结果。您还可以在查询中指定排序顺序,以使结果按实体的属性值排序。结果包括针对过滤条件和排序顺序中指定的每个属性均至少有一个值,并且其属性值符合所有指定过滤条件的全部实体。查询可以返回整个实体、投影的实体,也可仅仅返回实体键。

一个典型查询包括以下元素:

执行时,查询将检索给定种类的实体中满足过滤条件的所有实体,并按指定顺序排序。查询以只读方式执行。

注意:为了节约内存并提高性能,查询应尽可能指定对返回结果数量的限制。

每个查询都使用一个或多个索引来计算其结果,索引包含其属性指定的序列中的实体键,还可以选择包含实体的祖先实体。索引会逐渐更新以体现应用对其实体所做的更改,从而保证无需进一步计算即可提供所有查询的正确结果。

基于索引的查询机制支持多种查询,适用于大多数应用。但它不支持其他数据库技术中常见的某些种类的查询:特别是 Datastore 模式查询引擎不支持联接和聚合查询。如需了解 Datastore 模式查询的相关限制,请参阅查询限制

查询接口

以下是针对 Datastore 模式数据库发出查询的一个基本示例。该查询会检索所有优先级大于或等于 4 并且尚未完成的任务,并按优先级的降序顺序排列查询结果:

C#

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore C# API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

Query query = new Query("Task")
{
    Filter = Filter.And(Filter.Equal("done", false),
        Filter.GreaterThanOrEqual("priority", 4)),
    Order = { { "priority", PropertyOrder.Types.Direction.Descending } }
};

Go

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Go API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

query := datastore.NewQuery("Task").
	FilterField("Done", "=", false).
	FilterField("Priority", ">=", 4).
	Order("-Priority")

Java

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Java API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

Query<Entity> query =
    Query.newEntityQueryBuilder()
        .setKind("Task")
        .setFilter(
            CompositeFilter.and(
                PropertyFilter.eq("done", false), PropertyFilter.ge("priority", 4)))
        .setOrderBy(OrderBy.desc("priority"))
        .build();

Node.js

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Node.js API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

const query = datastore
  .createQuery('Task')
  .filter('done', '=', false)
  .filter('priority', '>=', 4)
  .order('priority', {
    descending: true,
  });

PHP

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore PHP API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

$query = $datastore->query()
    ->kind('Task')
    ->filter('done', '=', false)
    ->filter('priority', '>=', 4)
    ->order('priority', Query::ORDER_DESCENDING);

Python

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Python API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

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="Task")
query.add_filter("done", "=", False)
query.add_filter("priority", ">=", 4)
query.order = ["-priority"]

Ruby

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Ruby API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

query = datastore.query("Task")
                 .where("done", "=", false)
                 .where("priority", ">=", 4)
                 .order("priority", :desc)

GQL


SELECT * FROM Task
WHERE done = FALSE AND priority >= 4
ORDER BY priority DESC

下面展示了如何运行查询:

C#

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore C# API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

Query query = new Query("Task");
DatastoreQueryResults tasks = _db.RunQuery(query);

Go

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Go API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

it := client.Run(ctx, query)
for {
	var task Task
	_, err := it.Next(&task)
	if err == iterator.Done {
		break
	}
	if err != nil {
		log.Fatalf("Error fetching next task: %v", err)
	}
	fmt.Printf("Task %q, Priority %d\n", task.Description, task.Priority)
}

Java

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Java API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

QueryResults<Entity> tasks = datastore.run(query);

Node.js

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Node.js API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

const [tasks] = await datastore.runQuery(query);
console.log('Tasks:');
tasks.forEach(task => console.log(task));

PHP

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore PHP API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

$result = $datastore->runQuery($query);

Python

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Python API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

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()
results = list(query.fetch())

Ruby

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Ruby API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

tasks = datastore.run query

GQL

不适用

查询结构

在一个查询中,您可以指定一个实体种类、零个或零个以上过滤条件,以及零个或零个以上排序顺序

过滤条件

查询的过滤条件用于为待检索实体的属性和祖先实体设定限制条件。

属性过滤条件

属性过滤条件会指定:

  • 一个属性名称
  • 比较运算符
  • 一个属性值

本示例返回标记为未完成的 Task 实体:

C#

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore C# API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

Query query = new Query("Task")
{
    Filter = Filter.Equal("done", false)
};

Go

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Go API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

query := datastore.NewQuery("Task").FilterField("Done", "=", false)

Java

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Java API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

Query<Entity> query =
    Query.newEntityQueryBuilder()
        .setKind("Task")
        .setFilter(PropertyFilter.eq("done", false))
        .build();

Node.js

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Node.js API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

const query = datastore.createQuery('Task').filter('done', '=', false);

PHP

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore PHP API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

$query = $datastore->query()
    ->kind('Task')
    ->filter('done', '=', false);

Python

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Python API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

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="Task")
query.add_filter("done", "=", False)

Ruby

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Ruby API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

query = datastore.query("Task")
                 .where("done", "=", false)

GQL


SELECT * FROM Task WHERE done = FALSE

属性值必须由应用提供;不能引用其他属性或者根据其他属性计算得出。如果一个实体具有给定名称的属性,并且其值与过滤条件中指定值的比较结果与比较运算符所述的方式一致,则该实体满足该过滤条件。如果给定名称的属性是数组值,并且其任何值与过滤条件中指定值的比较结果与比较运算符所述的方式一致,则该实体满足该过滤条件。

比较运算符可以是以下任何一项:

运算符 含义
EQUAL 等于
LESS_THAN 小于
LESS_THAN_OR_EQUAL 小于或等于
GREATER_THAN 大于
GREATER_THAN_OR_EQUAL 大于或等于
NOT_EQUAL 不等于
IN 指定列表的成员。等于指定列表中的任意值。
NOT_IN 不是指定列表的成员。不等于指定列表中的任意值。

复合过滤条件

复合过滤条件由多个属性过滤条件组成。您可以将过滤条件与 ANDOR 结合使用。以下示例返回标记为未完成且优先级为 4 的 Task 实体:

C#

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore C# API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

Query query = new Query("Task")
{
    Filter = Filter.And(Filter.Equal("done", false),
        Filter.Equal("priority", 4)),
};

Go

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Go API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

query := datastore.NewQuery("Task").
	FilterField("Done", "=", false).
	FilterField("Priority", "=", 4)

Java

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Java API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

Query<Entity> query =
    Query.newEntityQueryBuilder()
        .setKind("Task")
        .setFilter(
            CompositeFilter.and(
                PropertyFilter.eq("done", false), PropertyFilter.eq("priority", 4)))
        .build();

Node.js

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Node.js API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

const query = datastore
  .createQuery('Task')
  .filter('done', '=', false)
  .filter('priority', '=', 4);

PHP

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore PHP API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

$query = $datastore->query()
    ->kind('Task')
    ->filter('done', '=', false)
    ->filter('priority', '=', 4);

Python

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Python API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

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="Task")
query.add_filter("done", "=", False)
query.add_filter("priority", "=", 4)

Ruby

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Ruby API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

query = datastore.query("Task")
                 .where("done", "=", false)
                 .where("priority", "=", 4)

GQL


SELECT * FROM Task WHERE done = FALSE AND priority = 4

以下示例结合使用过滤器与逻辑 OR

C#

无可用代码段。

Go

无可用代码段。

Java

如需了解如何安装和使用 Datastore 模式的客户端库,请参阅 Datastore 模式客户端库。如需了解详情,请参阅 Datastore 模式 Java API 参考文档

如需对 Datastore 模式进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

import com.google.cloud.datastore.Datastore;
import com.google.cloud.datastore.DatastoreOptions;
import com.google.cloud.datastore.Entity;
import com.google.cloud.datastore.Query;
import com.google.cloud.datastore.QueryResults;
import com.google.cloud.datastore.StructuredQuery.CompositeFilter;
import com.google.cloud.datastore.StructuredQuery.Filter;
import com.google.cloud.datastore.StructuredQuery.PropertyFilter;

public class OrFilterQuery {
  public static void invoke() throws Exception {

    // Instantiates a client
    Datastore datastore = DatastoreOptions.getDefaultInstance().getService();
    String propertyName = "description";

    // Create the two filters
    Filter orFilter =
        CompositeFilter.or(
            PropertyFilter.eq(propertyName, "Feed cats"),
            PropertyFilter.eq(propertyName, "Buy milk"));

    // Build the query
    Query<Entity> query = Query.newEntityQueryBuilder().setKind("Task").setFilter(orFilter).build();

    // Get the results back from Datastore
    QueryResults<Entity> results = datastore.run(query);

    if (!results.hasNext()) {
      throw new Exception("query yielded no results");
    }

    while (results.hasNext()) {
      Entity entity = results.next();
      System.out.printf("Entity: %s%n", entity);
    }
  }
}

Node.js

如需了解如何安装和使用 Datastore 模式的客户端库,请参阅 Datastore 模式客户端库。如需了解详情,请参阅 Datastore 模式 Node.js API 参考文档

如需对 Datastore 模式进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

/**
 * TODO(developer): Uncomment these variables before running the sample.
 */
// const projectId = "your Google Cloud project id";

// Imports the Cloud Datastore
const {Datastore, PropertyFilter, or} = require('@google-cloud/datastore');

async function queryFilterOr() {
  // Instantiate the Datastore
  const datastore = new Datastore();
  const query = datastore
    .createQuery('Task')
    .filter(
      or([
        new PropertyFilter('description', '=', 'Buy milk'),
        new PropertyFilter('description', '=', 'Feed cats'),
      ])
    );

  const [entities] = await datastore.runQuery(query);
  for (const entity of entities) {
    console.log(`Entity found: ${entity['description']}`);
  }
}

await queryFilterOr();
PHP

无可用代码段。

Python

如需了解如何安装和使用 Datastore 模式的客户端库,请参阅 Datastore 模式客户端库。如需了解详情,请参阅 Datastore 模式 Python API 参考文档

如需对 Datastore 模式进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

from google.cloud import datastore
from google.cloud.datastore import query

def query_filter_or(project_id: str) -> None:
    """Builds a union of two queries (OR) filter.

    Arguments:
        project_id: your Google Cloud Project ID
    """
    client = datastore.Client(project=project_id)

    or_query = client.query(kind="Task")
    or_filter = query.Or(
        [
            query.PropertyFilter("description", "=", "Buy milk"),
            query.PropertyFilter("description", "=", "Feed cats"),
        ]
    )

    or_query.add_filter(filter=or_filter)

    results = or_query.fetch()
    for result in results:
        print(result["description"])
Ruby

无可用代码段。

GQL

无可用代码段。

Datastore 模式的 Firestore 支持将过滤条件与 ANDOR 运算符结合使用。以下示例返回已加星标或已标记为未完成且优先级为 4 的 Task 实体:
C#

无可用代码段。

Go

无可用代码段。

Java
Query query =
    Query.newEntityQueryBuilder()
        .setKind("Task")
        .setFilter(CompositeFilter.or(
            PropertyFilter.eq("starred", true)),
            CompositeFilter.and(
                PropertyFilter.eq("done", false),
                PropertyFilter.eq("priority", 4)))
        .build();

Node.js

无可用代码段。

PHP

无可用代码段。

Python
and_or_query = client.query(kind="Task")

query_filter = query.Or(
    [
        query.PropertyFilter("starred", "=", True),
        query.And([query.PropertyFilter("done", "=", False),
                    query.PropertyFilter("priority", "=", 4,),
        ]
        )
    ]
)

and_or_query.add_filter(filter=query_filter)

results = and_or_query.fetch()
for result in results:
    print(result["description"])
Ruby

无可用代码段。

GQL

无可用代码段。

主要过滤条件

如需将实体键的值作为过滤条件,请使用特殊属性 __key__

C#

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore C# API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

Query query = new Query("Task")
{
    Filter = Filter.GreaterThan("__key__", _keyFactory.CreateKey("aTask"))
};

Go

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Go API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

key := datastore.NameKey("Task", "someTask", nil)
query := datastore.NewQuery("Task").FilterField("__key__", ">", key)

Java

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Java API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

Query<Entity> query =
    Query.newEntityQueryBuilder()
        .setKind("Task")
        .setFilter(PropertyFilter.gt("__key__", keyFactory.newKey("someTask")))
        .build();

Node.js

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Node.js API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

const query = datastore
  .createQuery('Task')
  .filter('__key__', '>', datastore.key(['Task', 'someTask']));

PHP

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore PHP API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

$query = $datastore->query()
    ->kind('Task')
    ->filter('__key__', '>', $datastore->key('Task', 'someTask'));

Python

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Python API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

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="Task")
first_key = client.key("Task", "first_task")
# key_filter(key, op) translates to add_filter('__key__', op, key).
query.key_filter(first_key, ">")

Ruby

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Ruby API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

query = datastore.query("Task")
                 .where("__key__", ">", datastore.key("Task", "someTask"))

GQL


SELECT * FROM Task WHERE __key__ > KEY(Task, 'someTask')

在进行不等性比较时,键会依次按照以下标准排序:

  1. 祖先实体路径
  2. 实体种类
  3. 标识符(键名称或数字 ID)

祖先实体路径的元素采用类似的方式进行比较:按种类(字符串),然后按键名称或数字 ID 比较。种类和键名称是字符串,按字节值排序;数字 ID 是整数,按数字顺序排列。如果具有相同父级和种类的实体混合使用键名称字符串和数字 ID,那么使用数字 ID 的实体排在使用键名称的实体前面。

针对键的查询就像针对属性的查询一样使用索引,并且在相同情况下需要自定义索引,但有一些例外:不等性过滤条件或键的升序排序不需要自定义索引,但键的降序排序则需要自定义索引。与所有查询一样,如果在开发环境中使用了需要自定义索引的查询,则开发服务器会在索引配置文件中创建适当的条目。

排序顺序

查询的排序顺序会指定:

  • 属性名称。
  • 排序方向(升序或降序)。默认的排序顺序是升序。

此示例按创建时间对 Task 实体进行升序排序:

C#

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore C# API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

Query query = new Query("Task")
{
    Order = { { "created", PropertyOrder.Types.Direction.Ascending } }
};

Go

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Go API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

query := datastore.NewQuery("Task").Order("created")

Java

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Java API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

Query<Entity> query =
    Query.newEntityQueryBuilder().setKind("Task").setOrderBy(OrderBy.asc("created")).build();

Node.js

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Node.js API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

const query = datastore.createQuery('Task').order('created');

PHP

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore PHP API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

$query = $datastore->query()
    ->kind('Task')
    ->order('created');

Python

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Python API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

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="Task")
query.order = ["created"]

Ruby

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Ruby API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

query = datastore.query("Task")
                 .order("created", :asc)

GQL


SELECT * FROM Task ORDER BY created ASC

此示例按创建时间对 Task 实体进行降序排序:

C#

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore C# API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

Query query = new Query("Task")
{
    Order = { { "created", PropertyOrder.Types.Direction.Descending } }
};

Go

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Go API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

query := datastore.NewQuery("Task").Order("-created")

Java

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Java API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

Query<Entity> query =
    Query.newEntityQueryBuilder().setKind("Task").setOrderBy(OrderBy.desc("created")).build();

Node.js

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Node.js API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

const query = datastore.createQuery('Task').order('created', {
  descending: true,
});

PHP

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore PHP API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

$query = $datastore->query()
    ->kind('Task')
    ->order('created', Query::ORDER_DESCENDING);

Python

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Python API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

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="Task")
query.order = ["-created"]

Ruby

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Ruby API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

query = datastore.query("Task")
                 .order("created", :desc)

GQL


SELECT * FROM Task ORDER BY created DESC

如果查询包含多个排序顺序,则按指定的序列加以应用。以下示例先按优先级降序排序,然后按创建时间升序排序:

C#

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore C# API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

Query query = new Query("Task")
{
    Order = { { "priority", PropertyOrder.Types.Direction.Descending },
        { "created", PropertyOrder.Types.Direction.Ascending } }
};

Go

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Go API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

query := datastore.NewQuery("Task").Order("-priority").Order("created")

Java

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Java API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

Query<Entity> query =
    Query.newEntityQueryBuilder()
        .setKind("Task")
        .setOrderBy(OrderBy.desc("priority"), OrderBy.asc("created"))
        .build();

Node.js

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Node.js API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

const query = datastore
  .createQuery('Task')
  .order('priority', {
    descending: true,
  })
  .order('created');

PHP

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore PHP API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

$query = $datastore->query()
    ->kind('Task')
    ->order('priority', Query::ORDER_DESCENDING)
    ->order('created');

Python

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Python API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

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="Task")
query.order = ["-priority", "created"]

Ruby

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Ruby API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

query = datastore.query("Task")
                 .order("priority", :desc)
                 .order("created", :asc)

GQL


SELECT * FROM Task ORDER BY priority DESC, created ASC

如果未指定排序顺序,将按照从 Datastore 模式检索的顺序返回结果。

注意:对于 Datastore 模式执行查询的方式,如果查询对某个属性指定了不等性过滤条件,而对其他属性指定了排序顺序,则不等性过滤条件中使用的属性必须先于其他属性进行排序。

特殊查询类型

应特别注意一些特定类型的查询:

!= Not equal

使用不等于 (!=) 运算符会返回给定属性存在但与比较值不匹配的实体。

C#

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore C# API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

不适用

Go

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Go API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

package datastore_snippets

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/datastore"
	"google.golang.org/api/iterator"
)

func queryNotEquals(w io.Writer, projectId string) error {
	ctx := context.Background()
	client, err := datastore.NewClient(ctx, projectId)
	if err != nil {
		return fmt.Errorf("NewClient: %w", err)
	}
	defer client.Close()

	q := datastore.NewQuery("TaskList")
	q.FilterField("Task", "!=", []string{"notASimpleTask"})

	it := client.Run(ctx, q)
	for {
		var dst struct {
			Task string
		}
		key, err := it.Next(&dst)
		if err == iterator.Done {
			break
		}

		if err != nil {
			return err
		}
		fmt.Fprintf(w, "Key retrieved: %v\n", key)
	}

	return nil
}

Java

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Java API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

Query<Entity> query =
    Query.newEntityQueryBuilder()
        .setKind("Task")
        .setFilter(PropertyFilter.neq("category", "Work"))
        .build();

Node.js

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Node.js API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

不适用

PHP

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore PHP API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

不适用

Python

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Python API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

query = client.query(kind="Task")
query.add_filter("category", "!=", "work")

Ruby

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Ruby API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

不适用

GQL


SELECT * FROM Task WHERE category != 'work'

此查询会返回存在 category 属性并设置为 Work 以外的任何值的每个 Task 实体。

此查询不会返回不存在 category 属性的实体。不等于 (!=) 和 NOT_IN 查询会排除给定属性不存在或该属性已从索引中排除的实体。当属性被设置成任何值(包括空字符串或 null)时,就会存在该属性。

限制

请注意 != 查询的以下限制:

  • 只有给定属性存在的实体才能与该查询匹配。
  • 您不能在复合查询中组合使用 NOT_IN!=
  • 在复合查询中,不等式过滤条件(<<=>>=!=NOT_IN)必须全部过滤同一属性。

IN

使用 IN 运算符可通过逻辑 OR 在同一属性上结合使用最多 30 个等式 (==) 子句。IN 查询会返回给定属性与任何比较值匹配的实体。

C#

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore C# API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

不适用

Go

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Go API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

package datastore_snippets

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/datastore"
	"google.golang.org/api/iterator"
)

func queryIn(w io.Writer, projectId string) error {
	ctx := context.Background()
	client, err := datastore.NewClient(ctx, projectId)
	if err != nil {
		return fmt.Errorf("NewClient: %w", err)
	}
	defer client.Close()

	q := datastore.NewQuery("TaskList")
	q.FilterField("Task", "in", []string{"simpleTask", "easyTask"})

	it := client.Run(ctx, q)
	for {
		var dst struct {
			Task string
		}
		key, err := it.Next(&dst)
		if err == iterator.Done {
			break
		}

		if err != nil {
			return err
		}
		fmt.Fprintf(w, "Key retrieved: %v\n", key)
	}

	return nil
}

Java

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Java API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

Query<Entity> query =
    Query.newEntityQueryBuilder()
        .setKind("Task")
        .setFilter(PropertyFilter.in("tag", ListValue.of("learn", "study")))
        .build();

Node.js

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Node.js API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

不适用

PHP

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore PHP API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

不适用

Python

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Python API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

query = client.query(kind="Task")
query.add_filter("tag", "IN", ["learn", "study"])

Ruby

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Ruby API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

不适用

GQL


SELECT * FROM Task WHERE tag IN ARRAY('learn', 'study')

此查询会返回每一个 tag 属性设置为 learnstudyTask 实体。这包括 tag 属性包含其中一个值但不包含另一个值的 Task 实体。

NOT_IN

使用 NOT_IN 运算符可通过逻辑 AND 在同一属性上结合使用最多 10 个不等于 (!=) 子句。NOT_IN 查询会返回给定属性存在但与任何比较值都不匹配的实体。

C#

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore C# API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

不适用

Go

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Go API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

package datastore_snippets

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/datastore"
	"google.golang.org/api/iterator"
)

func queryNotIn(w io.Writer, projectId string) error {
	ctx := context.Background()
	client, err := datastore.NewClient(ctx, projectId)
	if err != nil {
		return fmt.Errorf("NewClient: %w", err)
	}
	defer client.Close()

	q := datastore.NewQuery("TaskList")
	q.FilterField("Task", "not-in", []string{"notASimpleTask", "notAnEasyTask"})

	it := client.Run(ctx, q)
	for {
		var dst struct {
			Task string
		}
		key, err := it.Next(&dst)
		if err == iterator.Done {
			break
		}

		if err != nil {
			return err
		}
		fmt.Fprintf(w, "Key retrieved: %v\n", key)
	}

	return nil
}

Java

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Java API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

Query<Entity> query =
    Query.newEntityQueryBuilder()
        .setKind("Task")
        .setFilter(PropertyFilter.not_in("category", ListValue.of("Work", "Chores", "School")))
        .build();

Node.js

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Node.js API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

不适用

PHP

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore PHP API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

不适用

Python

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Python API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

query = client.query(kind="Task")
query.add_filter("category", "NOT_IN", ["work", "chores", "school"])

Ruby

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Ruby API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

不适用

GQL


SELECT * FROM Task WHERE category NOT IN ARRAY('work', 'chores', 'school')

此查询不会返回不存在 category 实体的实体。不等于 (!=) 和 NOT_IN 查询会排除给定属性不存在的实体。当属性被设置成任何值(包括空字符串或 null)时,就会存在该属性。

限制

请注意 NOT_IN 查询的以下限制:

  • 只有给定属性存在的实体才能与该查询匹配。
  • 您不能在复合查询中组合使用 NOT_IN!=
  • 在复合查询中,不等性过滤条件(<<=>>=!=NOT_IN)必须全部针对同一属性进行过滤。

祖先查询

祖先查询会将其结果限制为指定的实体及其后代。此示例返回以指定的 TaskList 实体作为祖先实体的所有 Task 实体:

C#

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore C# API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

Query query = new Query("Task")
{
    Filter = Filter.HasAncestor(_db.CreateKeyFactory("TaskList")
        .CreateKey(keyName))
};

Go

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Go API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

ancestor := datastore.NameKey("TaskList", "default", nil)
query := datastore.NewQuery("Task").Ancestor(ancestor)

Java

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Java API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

Query<Entity> query =
    Query.newEntityQueryBuilder()
        .setKind("Task")
        .setFilter(
            PropertyFilter.hasAncestor(
                datastore.newKeyFactory().setKind("TaskList").newKey("default")))
        .build();

Node.js

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Node.js API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

const ancestorKey = datastore.key(['TaskList', 'default']);

const query = datastore.createQuery('Task').hasAncestor(ancestorKey);

PHP

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore PHP API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

$ancestorKey = $datastore->key('TaskList', 'default');
$query = $datastore->query()
    ->kind('Task')
    ->hasAncestor($ancestorKey);

Python

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Python API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

from google.cloud import datastore

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

# Query filters are omitted in this example as any ancestor queries with a
# non-key filter require a composite index.
ancestor = client.key("TaskList", "default")
query = client.query(kind="Task", ancestor=ancestor)

Ruby

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Ruby API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

# task_list_name = "default"
ancestor_key = datastore.key "TaskList", task_list_name

query = datastore.query("Task")
                 .ancestor(ancestor_key)

GQL


SELECT * FROM Task WHERE __key__ HAS ANCESTOR KEY(TaskList, 'default')

祖先实体查询的限制

请注意 Ancestor 查询的以下限制:

  • 所有已评估的除法都必须具有相同的祖先过滤条件。

不分类查询

没有种类、没有祖先实体的查询会从 Datastore 模式中检索某个应用的所有实体。这种“不分类查询”不能包含针对属性值的过滤条件或排序顺序。但是,它们可以对实体键进行过滤,并使用祖先实体过滤条件。通过指定 __key__ 作为属性名称,即可使用键过滤条件:

C#

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore C# API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

Query query = new Query()
{
    Filter = Filter.GreaterThan("__key__",
        _keyFactory.CreateKey("aTask"))
};

Go

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Go API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

query := datastore.NewQuery("").FilterField("__key__", ">", lastSeenKey)

Java

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Java API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

Query<Entity> query =
    Query.newEntityQueryBuilder().setFilter(PropertyFilter.gt("__key__", lastSeenKey)).build();

Node.js

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Node.js API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

const query = datastore
  .createQuery()
  .filter('__key__', '>', lastSeenKey)
  .limit(1);

PHP

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore PHP API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

$query = $datastore->query()
    ->filter('__key__', '>', $lastSeenKey);

Python

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Python API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

from google.cloud import datastore

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

last_seen_key = client.key("Task", "a")
query = client.query()
query.key_filter(last_seen_key, ">")

Ruby

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Ruby API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

query = Google::Cloud::Datastore::Query.new
query.where "__key__", ">", last_seen_key

GQL


SELECT * WHERE __key__ > KEY(Task, 'someTask')

投影查询

大多数查询将返回完整的实体作为其结果,但通常情况下,应用实际上仅关注实体的几个属性。 投影查询允许您仅查询某个实体上您确实需要的那些特定属性,延迟和成本都比检索整个实体更低。

投影查询要求将指定的属性编入索引。

仅限于键的查询

仅限于键的查询(本身是一种投影查询)仅返回结果实体的键而非实体本身,其延迟和成本低于检索整个实体。

与执行获取的实体数量比所需数量多的常规查询相比,首先执行仅限于键的查询,然后从结果中获取实体的子集往往更为经济。

下面展示了如何创建仅限于键的查询:

C#

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore C# API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

Query query = new Query("Task")
{
    Projection = { "__key__" }
};

Go

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Go API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

query := datastore.NewQuery("Task").KeysOnly()

Java

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Java API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

Query<Key> query = Query.newKeyQueryBuilder().setKind("Task").build();

Node.js

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Node.js API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

const query = datastore.createQuery().select('__key__').limit(1);

PHP

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore PHP API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

$query = $datastore->query()
    ->keysOnly();

Python

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Python API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

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()
query.keys_only()

Ruby

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Ruby API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

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

GQL


SELECT __key__ FROM Task

仅限于键的查询属于小规模操作,仅计为针对查询本身的一次实体读取。

投影

投影查询类似于如下形式的 SQL 查询:

SELECT priority, percent_complete FROM Task

您可以使用标准实体查询的所有过滤与排序功能,但应注意这些限制

示例 SQL 查询会返回删节的结果,其中只有指定的属性(prioritypercent_complete)填充了值;其他所有属性均未填充值。您可以通过以下方法将其构建为投影查询:

C#

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore C# API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

Query query = new Query("Task")
{
    Projection = { "priority", "percent_complete" }
};

Go

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Go API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

query := datastore.NewQuery("Task").Project("Priority", "PercentComplete")

Java

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Java API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

Query<ProjectionEntity> query =
    Query.newProjectionEntityQueryBuilder()
        .setKind("Task")
        .setProjection("priority", "percent_complete")
        .build();

Node.js

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Node.js API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

const query = datastore
  .createQuery('Task')
  .select(['priority', 'percent_complete']);

PHP

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore PHP API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

$query = $datastore->query()
    ->kind('Task')
    ->projection(['priority', 'percent_complete']);

Python

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Python API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

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="Task")
query.projection = ["priority", "percent_complete"]

Ruby

如需了解如何安装和使用 Cloud Datastore 客户端库,请参阅 Cloud Datastore 客户端库。如需了解详情,请参阅 Cloud Datastore Ruby API 参考文档

如需向 Cloud Datastore 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

query = datastore.query("Task")
                 .select("priority", "percent_complete")

GQL


SELECT priority, percent_complete FROM Task

下面展示了如何运行投影查询: