Datastore 쿼리

쿼리를 통해 Datastore 모드의 Cloud Firestore에서 지정된 여러 조건을 충족하는 항목을 검색할 수 있습니다.

쿼리는 지정된 종류의 항목을 대상으로 작동하며, 항목의 속성 값, 키, 상위 항목에 필터를 지정하고 0개 이상의 항목을 결과로 반환할 수 있습니다. 또한 정렬 순서를 지정하여 결과를 속성 값에 따라 순차적으로 배열할 수 있습니다. 결과에는 필터와 정렬 순서에 명명된 모든 속성에 대한 값이 하나 이상 있으며 해당 속성 값이 지정된 모든 필터 기준을 만족하는 모든 항목이 포함됩니다. 쿼리는 전체 항목, 예상된 항목 또는 항목 키만 반환할 수 있습니다.

일반적인 쿼리에는 다음이 포함됩니다.

  • 쿼리가 적용되는 항목 종류
  • 항목의 속성 값, 키, 상위를 기반으로 하는 0개 이상의 필터
  • 결과를 순차적으로 배열할 0개 이상의 정렬 순서

쿼리가 실행되면 지정된 순서대로 정렬된 지정한 모든 필터를 만족하는 지정한 종류의 모든 항목을 검색합니다. 쿼리는 읽기 전용으로 실행됩니다.

참고: 메모리를 절약하고 성능을 개선하려면 가능한 한 쿼리에서 반환되는 결과 수를 제한해야 합니다.

모든 쿼리는 하나 이상의 색인을 사용하여 결과를 계산하며, 색인에는 색인 속성에 지정된 순서대로 항목 키와 항목의 상위 항목(선택사항)이 포함됩니다. 색인은 애플리케이션이 해당 항목을 대상으로 수행하는 모든 변경 내용을 반영하도록 증분 방식으로 업데이트되므로 추가 계산 없이도 모든 쿼리의 결과가 올바르게 제공됩니다.

색인 기반 쿼리 메커니즘은 다양한 쿼리를 지원하며 대부분의 애플리케이션에 적합하지만 다른 데이터베이스 기술에 일반적으로 사용되는 몇몇 종류의 쿼리는 지원하지 않습니다. 특히 조인 및 집계 쿼리는 Datastore 모드 쿼리 엔진에서 지원되지 않습니다. Datastore 모드 쿼리의 제한사항은 아래의 쿼리 제한사항을 참조하세요.

쿼리 인터페이스

다음은 Datastore 모드 데이터베이스를 대상으로 쿼리를 실행하는 기본적인 예입니다. 이 예에서는 우선순위 기준으로 내림차순으로 정렬했을 때 우선순위가 4 이상이며 아직 수행되지 않은 모든 태스크를 검색합니다.

C#

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore C# API 참조 문서를 참조하세요.

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 참조 문서를 참조하세요.

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

자바

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Java API 참조 문서를 참조하세요.

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 참조 문서를 참조하세요.

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

PHP

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore PHP API 참조 문서를 참조하세요.

$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 참조 문서를 참조하세요.

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 참조 문서를 참조하세요.

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 참조 문서를 참조하세요.

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

Go

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Go API 참조 문서를 참조하세요.

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

자바

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Java API 참조 문서를 참조하세요.

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

Node.js

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Node.js API 참조 문서를 참조하세요.

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

PHP

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore PHP API 참조 문서를 참조하세요.

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

Python

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Python API 참조 문서를 참조하세요.

query = client.query()
results = list(query.fetch())

Ruby

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Ruby API 참조 문서를 참조하세요.

tasks = datastore.run query

GQL

해당 없음

쿼리 구조

쿼리에서는 항목 종류, 0개 이상의 필터, 0개 이상의 정렬 순서를 지정할 수 있습니다.

필터

쿼리의 필터는 가져올 항목의 속성, , 상위 항목에 대한 제약조건을 설정합니다.

속성 필터

속성 필터는 다음을 지정합니다.

  • 속성 이름
  • 비교 연산자
  • 속성 값

이 예에서는 완료되지 않음으로 표시된 Task 항목을 반환합니다.

C#

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore C# API 참조 문서를 참조하세요.

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

Go

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Go API 참조 문서를 참조하세요.

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

자바

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Java API 참조 문서를 참조하세요.

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

Node.js

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Node.js API 참조 문서를 참조하세요.

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

PHP

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore PHP API 참조 문서를 참조하세요.

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

Python

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Python API 참조 문서를 참조하세요.

query = client.query(kind='Task')
query.add_filter('done', '=', False)

Ruby

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Ruby API 참조 문서를 참조하세요.

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 이상

복합 필터

복합 필터는 둘 이상의 속성 필터로 구성됩니다. 이 예에서는 완료되지 않음으로 표시되고 우선순위가 4인 Task 항목을 반환합니다.

C#

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore C# API 참조 문서를 참조하세요.

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 참조 문서를 참조하세요.

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

자바

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Java API 참조 문서를 참조하세요.

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 참조 문서를 참조하세요.

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

PHP

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore PHP API 참조 문서를 참조하세요.

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

Python

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Python API 참조 문서를 참조하세요.

query = client.query(kind='Task')
query.add_filter('done', '=', False)
query.add_filter('priority', '=', 4)

Ruby

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Ruby API 참조 문서를 참조하세요.

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

GQL


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

Datastore 모드의 Cloud Firestore는 기본적으로 AND 연산자를 사용한 필터 결합만 지원합니다.

키 필터

항목 키의 값을 필터링하려면 특수 속성 __key__를 사용하세요.

C#

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore C# API 참조 문서를 참조하세요.

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

Go

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Go API 참조 문서를 참조하세요.

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

자바

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Java API 참조 문서를 참조하세요.

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 참조 문서를 참조하세요.

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

PHP

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore PHP API 참조 문서를 참조하세요.

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

Python

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Python API 참조 문서를 참조하세요.

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 참조 문서를 참조하세요.

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 참조 문서를 참조하세요.

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

Go

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Go API 참조 문서를 참조하세요.

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

자바

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Java API 참조 문서를 참조하세요.

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

Node.js

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Node.js API 참조 문서를 참조하세요.

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

PHP

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore PHP API 참조 문서를 참조하세요.

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

Python

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Python API 참조 문서를 참조하세요.

query = client.query(kind='Task')
query.order = ['created']

Ruby

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Ruby API 참조 문서를 참조하세요.

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 참조 문서를 참조하세요.

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

Go

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Go API 참조 문서를 참조하세요.

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

자바

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Java API 참조 문서를 참조하세요.

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

Node.js

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Node.js API 참조 문서를 참조하세요.

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

PHP

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore PHP API 참조 문서를 참조하세요.

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

Python

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Python API 참조 문서를 참조하세요.

query = client.query(kind='Task')
query.order = ['-created']

Ruby

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Ruby API 참조 문서를 참조하세요.

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

GQL


SELECT * FROM Task ORDER BY created DESC

쿼리에 정렬 순서가 여러 개 있으면 지정한 순서대로 적용됩니다. 다음 예에서는 내림차순 우선순위에 이어 오름차순 생성 시간에 따라 정렬합니다.

C#

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore C# API 참조 문서를 참조하세요.

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 참조 문서를 참조하세요.

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

자바

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Java API 참조 문서를 참조하세요.

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 참조 문서를 참조하세요.

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

PHP

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore PHP API 참조 문서를 참조하세요.

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

Python

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Python API 참조 문서를 참조하세요.

query = client.query(kind='Task')
query.order = [
    '-priority',
    'created'
]

Ruby

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Ruby API 참조 문서를 참조하세요.

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

GQL


SELECT * FROM Task ORDER BY priority DESC, created ASC

정렬 순서가 지정되지 않으면 결과는 Datastore 모드에서 검색된 순서대로 반환됩니다.

참고: 쿼리에 속성에 대한 비균등 필터와 다른 속성에 대한 정렬 순서가 지정되어 있으면 Datastore 모드의 쿼리 실행 방식으로 인해 비균등 필터에 사용된 속성이 다른 속성보다 먼저 정렬되어야 합니다.

특수 쿼리 유형

특정 유형의 쿼리가 몇 가지 있습니다.

상위 쿼리

상위 쿼리는 지정한 항목과 해당 하위 항목으로 결과를 제한합니다. 이 예에서는 지정한 TaskList 항목이 상위인 모든 Task 항목을 반환합니다.

C#

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore C# API 참조 문서를 참조하세요.

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

Go

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Go API 참조 문서를 참조하세요.

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

자바

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Java API 참조 문서를 참조하세요.

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 참조 문서를 참조하세요.

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

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

PHP

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore PHP API 참조 문서를 참조하세요.

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

Python

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Python API 참조 문서를 참조하세요.

# 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 참조 문서를 참조하세요.

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

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

GQL


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

비구분 쿼리

종류와 상위 항목이 지정되지 않은 쿼리는 Datastore 모드에서 애플리케이션의 모든 항목을 검색합니다. 이러한 비구분 쿼리는 속성 값에 대한 필터나 정렬 순서를 포함할 수 없습니다. 대신 항목 키를 필터링하고 상위 필터를 사용할 수 있습니다. __key__를 속성 이름으로 지정하여 키 필터를 사용할 수 있습니다.

C#

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore C# API 참조 문서를 참조하세요.

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

Go

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Go API 참조 문서를 참조하세요.

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

자바

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Java API 참조 문서를 참조하세요.

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

Node.js

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Node.js API 참조 문서를 참조하세요.

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

PHP

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore PHP API 참조 문서를 참조하세요.

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

Python

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Python API 참조 문서를 참조하세요.

query = client.query()
query.key_filter(last_seen_key, '>')

Ruby

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Ruby API 참조 문서를 참조하세요.

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 참조 문서를 참조하세요.

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

Go

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Go API 참조 문서를 참조하세요.

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

자바

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Java API 참조 문서를 참조하세요.

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

Node.js

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Node.js API 참조 문서를 참조하세요.

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

PHP

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore PHP API 참조 문서를 참조하세요.

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

Python

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Python API 참조 문서를 참조하세요.

query = client.query()
query.keys_only()

Ruby

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Ruby API 참조 문서를 참조하세요.

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 참조 문서를 참조하세요.

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

Go

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Go API 참조 문서를 참조하세요.

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

자바

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Java API 참조 문서를 참조하세요.

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

Node.js

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Node.js API 참조 문서를 참조하세요.

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

PHP

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore PHP API 참조 문서를 참조하세요.

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

Python

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Python API 참조 문서를 참조하세요.

query = client.query(kind='Task')
query.projection = ['priority', 'percent_complete']

Ruby

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Ruby API 참조 문서를 참조하세요.

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

GQL


SELECT priority, percent_complete FROM Task

또한 다음과 같은 방법으로 프로젝션 쿼리를 실행합니다.

C#

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore C# API 참조 문서를 참조하세요.

Query query = new Query("Task")
{
    Projection = { "priority", "percent_complete" }
};
List<long> priorities = new List<long>();
List<double> percentCompletes = new List<double>();
foreach (var entity in _db.RunQuery(query).Entities)
{
    priorities.Add((long)entity["priority"]);
    percentCompletes.Add((double)entity["percent_complete"]);
}

Go

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Go API 참조 문서를 참조하세요.

var priorities []int
var percents []float64
it := client.Run(ctx, query)
for {
	var task Task
	if _, err := it.Next(&task); err == iterator.Done {
		break
	} else if err != nil {
		log.Fatal(err)
	}
	priorities = append(priorities, task.Priority)
	percents = append(percents, task.PercentComplete)
}

자바

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Java API 참조 문서를 참조하세요.

List<Long> priorities = new LinkedList<>();
List<Double> percentCompletes = new LinkedList<>();
QueryResults<ProjectionEntity> tasks = datastore.run(query);
while (tasks.hasNext()) {
  ProjectionEntity task = tasks.next();
  priorities.add(task.getLong("priority"));
  percentCompletes.add(task.getDouble("percent_complete"));
}

Node.js

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Node.js API 참조 문서를 참조하세요.

async function runProjectionQuery() {
  const priorities = [];
  const percentCompletes = [];
  const [tasks] = await datastore.runQuery(query);
  tasks.forEach(task => {
    priorities.push(task.priority);
    percentCompletes.push(task.percent_complete);
  });

  return {
    priorities: priorities,
    percentCompletes: percentCompletes,
  };
}

PHP

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore PHP API 참조 문서를 참조하세요.

$priorities = array();
$percentCompletes = array();
$result = $datastore->runQuery($query);
/* @var Entity $task */
foreach ($result as $task) {
    $priorities[] = $task['priority'];
    $percentCompletes[] = $task['percent_complete'];
}

Python

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Python API 참조 문서를 참조하세요.

priorities = []
percent_completes = []

for task in query.fetch():
    priorities.append(task['priority'])
    percent_completes.append(task['percent_complete'])

Ruby

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Ruby API 참조 문서를 참조하세요.

priorities = []
percent_completes = []
datastore.run(query).each do |task|
  priorities << task["priority"]
  percent_completes << task["percent_complete"]
end

GQL

해당 없음

distinct on 절을 사용하지 않는 프로젝션 쿼리는 소규모 연산이며 쿼리 자체의 단일 항목 읽기로만 집계됩니다.

그룹화

프로젝션 쿼리는 distinct on 절을 사용하여 지정한 속성의 고유한 값 조합마다 첫 번째 결과만 반환되도록 할 수 있습니다. 그러면 프로젝션되는 속성의 값이 동일한 항목의 첫 번째 결과만 반환됩니다.

C#

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore C# API 참조 문서를 참조하세요.

Query query = new Query("Task")
{
    Projection = { "category", "priority" },
    DistinctOn = { "category" },
    Order = {
        { "category", PropertyOrder.Types.Direction.Ascending},
        {"priority", PropertyOrder.Types.Direction.Ascending }
    }
};

Go

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Go API 참조 문서를 참조하세요.

query := datastore.NewQuery("Task").
	Project("Priority", "Category").
	DistinctOn("Category").
	Order("Category").Order("Priority")

자바

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Java API 참조 문서를 참조하세요.

Query<ProjectionEntity> query = Query.newProjectionEntityQueryBuilder()
    .setKind("Task")
    .setProjection("category", "priority")
    .setDistinctOn("category")
    .setOrderBy(OrderBy.asc("category"), OrderBy.asc("priority"))
    .build();

Node.js

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Node.js API 참조 문서를 참조하세요.

const query = datastore
  .createQuery('Task')
  .groupBy('category')
  .order('category')
  .order('priority');

PHP

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore PHP API 참조 문서를 참조하세요.

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

Python

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Python API 참조 문서를 참조하세요.

query = client.query(kind='Task')
query.distinct_on = ['category']
query.order = ['category', 'priority']

Ruby

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Ruby API 참조 문서를 참조하세요.

query = datastore.query("Task")
                 .select("category", "priority")
                 .distinct_on("category")
                 .order("category")
                 .order("priority")

GQL


SELECT DISTINCT ON (category) category, priority FROM Task
ORDER BY category, priority

배열 값

배열 값을 가진 속성이 쿼리에 있으면 다음 사항을 고려하세요.

배열 값을 가진 속성의 놀라운 작동 방식

이 속성의 색인이 생성되는 방식으로 인해 동일한 속성의 값이 여러 개 있는 항목은 종종 예기치 못한 놀라운 방식으로 쿼리 필터 및 정렬 순서와 상호작용합니다.

쿼리에 지정된 속성의 비균등 필터가 여러 개 있으면 개별 속성 값 중 하나 이상이 모든 필터를 만족하는 경우에만 항목이 쿼리와 일치합니다. 예를 들어 Task 종류의 항목에서 tag 속성의 값이 funprogramming이면 이 항목은 쿼리와 일치하지 않습니다.

C#

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore C# API 참조 문서를 참조하세요.

Query query = new Query("Task")
{
    Filter = Filter.And(Filter.GreaterThan("tag", "learn"),
        Filter.LessThan("tag", "math"))
};

Go

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Go API 참조 문서를 참조하세요.

query := datastore.NewQuery("Task").
	Filter("Tag >", "learn").
	Filter("Tag <", "math")

자바

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Java API 참조 문서를 참조하세요.

Query<Entity> query = Query.newEntityQueryBuilder()
    .setKind("Task")
    .setFilter(CompositeFilter.and(
        PropertyFilter.gt("tag", "learn"), PropertyFilter.lt("tag", "math")))
    .build();

Node.js

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Node.js API 참조 문서를 참조하세요.

const query = datastore
  .createQuery('Task')
  .filter('tag', '>', 'learn')
  .filter('tag', '<', 'math');

PHP

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore PHP API 참조 문서를 참조하세요.

$query = $datastore->query()
    ->kind('Task')
    ->filter('tag', '>', 'learn')
    ->filter('tag', '<', 'math');

Python

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Python API 참조 문서를 참조하세요.

query = client.query(kind='Task')
query.add_filter('tag', '>', 'learn')
query.add_filter('tag', '<', 'math')

Ruby

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Ruby API 참조 문서를 참조하세요.

query = datastore.query("Task")
                 .where("tag", ">", "learn")
                 .where("tag", "<", "math")

GQL


SELECT * FROM Task WHERE tag > 'learn' AND tag < 'math'

항목의 tag 값은 각각 필터 중 하나를 만족하지만 단일 값이 두 필터를 모두 만족하지는 않습니다. 균등 필터에는 이 내용이 적용되지 않습니다. 예를 들어 동일한 항목은 쿼리를 만족합니다.

C#

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore C# API 참조 문서를 참조하세요.

Query query = new Query("Task")
{
    Filter = Filter.And(Filter.Equal("tag", "fun"),
        Filter.Equal("tag", "programming"))
};

Go

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Go API 참조 문서를 참조하세요.

query := datastore.NewQuery("Task").
	Filter("Tag =", "fun").
	Filter("Tag =", "programming")

자바

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Java API 참조 문서를 참조하세요.

Query<Entity> query = Query.newEntityQueryBuilder()
    .setKind("Task")
    .setFilter(CompositeFilter.and(
        PropertyFilter.eq("tag", "fun"), PropertyFilter.eq("tag", "programming")))
    .build();

Node.js

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Node.js API 참조 문서를 참조하세요.

const query = datastore
  .createQuery('Task')
  .filter('tag', '=', 'fun')
  .filter('tag', '=', 'programming');

PHP

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore PHP API 참조 문서를 참조하세요.

$query = $datastore->query()
    ->kind('Task')
    ->filter('tag', '=', 'fun')
    ->filter('tag', '=', 'programming');

Python

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Python API 참조 문서를 참조하세요.

query = client.query(kind='Task')
query.add_filter('tag', '=', 'fun')
query.add_filter('tag', '=', 'programming')

Ruby

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Ruby API 참조 문서를 참조하세요.

query = datastore.query("Task")
                 .where("tag", "=", "fun")
                 .where("tag", "=", "programming")

GQL


SELECT * FROM Task WHERE tag = 'fun' AND tag = 'programming'

항목의 개별 tag 값 중 어느 것도 두 필터 조건을 모두 만족하지 않아도 위와 같습니다.

마찬가지로 다중 값 속성의 정렬 순서는 일반적이지 않습니다. 이러한 속성은 고유한 값마다 색인에 한 번씩 나타나므로 색인에 먼저 보이는 값이 항목의 정렬 순서를 결정합니다.

다중 값 속성이 필터에 사용되지 않는 경우

  • 쿼리 결과가 속성에 따라 오름차순으로 정렬되면 가장 작은 속성 값이 정렬에 사용됩니다.
  • 쿼리 결과가 속성에 따라 내림차순으로 정렬되면 가장 큰 값이 정렬에 사용됩니다.
  • 다른 값은 정렬 순서에 영향을 주지 않으며 값의 개수도 마찬가지입니다.

그러면 오름차순 내림차순 둘 다에서 속성 값이 19인 항목이 4, 5, 6, 7 값을 가진 항목보다 앞에 오는 이상한 결과가 나옵니다.

다중 값 속성이 균등 필터에 사용되면 해당 속성의 모든 정렬 순서가 무시됩니다.

다중 값 속성이 비균등 필터에 사용되는 경우

  • 쿼리 결과가 속성에 따라 오름차순으로 정렬되면 쿼리의 비균등 필터를 모두 만족하는 가장 작은 값이 정렬에 사용됩니다.
  • 쿼리 결과가 속성에 따라 내림차순으로 정렬되면 쿼리의 비균등 필터를 모두 만족하는 가장 큰 값이 정렬에 사용됩니다.

속성의 비균등 필터 조합은 다음과 같이 균등 필터로 변환됩니다.

WHERE tags >= 'math' AND tags <= 'math'

필터가 균등 필터와 마찬가지로 평가하므로 해당 속성의 모든 정렬 순서가 무시됩니다.

WHERE tags = 'math'

프로젝션 및 배열 값 속성

배열 값을 가진 속성을 프로젝션하면 해당 속성의 값이 일부만 채워집니다. 그 대신 쿼리와 일치하는 프로젝션된 값의 고유한 조합마다 별도의 항목이 반환됩니다. 예를 들어 종류가 Task이고 두 개의 다중 값 속성인 tagscollaborators가 있는 항목이 있습니다.

C#

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore C# API 참조 문서를 참조하세요.

Entity task = new Entity()
{
    Key = _db.CreateKeyFactory("Task").CreateKey("sampleTask"),
    ["collaborators"] = new ArrayValue() { Values = { "alice", "bob" } },
    ["tags"] = new ArrayValue() { Values = { "fun", "programming" } }
};

Go

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Go API 참조 문서를 참조하세요.

type Task struct {
	Tags          []string
	Collaborators []string
}
task := &Task{
	Tags:          []string{"fun", "programming"},
	Collaborators: []string{"alice", "bob"},
}

자바

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Java API 참조 문서를 참조하세요.

Entity task = Entity.newBuilder(taskKey)
    .set("tags", "fun", "programming")
    .set("collaborators", "alice", "bob")
    .build();

Node.js

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Node.js API 참조 문서를 참조하세요.

const task = {
  tags: ['fun', 'programming'],
  collaborators: ['alice', 'bob'],
};

PHP

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore PHP API 참조 문서를 참조하세요.

$task = $datastore->entity(
    $key,
    [
        'tags' => ['fun', 'programming'],
        'collaborators' => ['alice', 'bob']
    ]
);

Python

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Python API 참조 문서를 참조하세요.

task = datastore.Entity(key)
task.update({
    'tags': [
        'fun',
        'programming'
    ],
    'collaborators': [
        'alice',
        'bob'
    ]
})

Ruby

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Ruby API 참조 문서를 참조하세요.

task = datastore.entity "Task", "sampleTask" do |t|
  t["tags"] = ["fun", "programming"]
  t["collaborators"] = ["alice", "bob"]
end

GQL

해당 없음

아래의 프로젝션 쿼리를 실행합니다.

SELECT tags, collaborators FROM Task WHERE collaborators < 'charlie'

그러면 다음의 값 조합이 있는 4개 항목을 반환합니다.

tags = 'fun', collaborators = 'alice'
tags = 'fun', collaborators = 'bob'
tags = 'programming', collaborators = 'alice'
tags = 'programming', collaborators = 'bob'

커서, 제한, 오프셋

한 배치에 반환되는 결과의 최대 수를 쿼리가 제어하도록 쿼리에 제한을 지정할 수 있습니다. 다음 예에서는 5개 이하로 Task 항목을 검색합니다.

C#

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore C# API 참조 문서를 참조하세요.

Query query = new Query("Task")
{
    Limit = 5,
};

Go

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Go API 참조 문서를 참조하세요.

query := datastore.NewQuery("Task").Limit(5)

자바

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Java API 참조 문서를 참조하세요.

Query<Entity> query = Query.newEntityQueryBuilder().setKind("Task").setLimit(5).build();

Node.js

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Node.js API 참조 문서를 참조하세요.

const query = datastore.createQuery('Task').limit(5);

PHP

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore PHP API 참조 문서를 참조하세요.

$query = $datastore->query()
    ->kind('Task')
    ->limit(5);

Python

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Python API 참조 문서를 참조하세요.

query = client.query()
tasks = list(query.fetch(limit=5))

Ruby

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Ruby API 참조 문서를 참조하세요.

query = datastore.query("Task")
                 .limit(5)

GQL


SELECT * FROM Task LIMIT 5

쿼리 커서를 사용하면 쿼리 오프셋의 오버헤드 발생 없이 애플리케이션에서 편리하게 일괄적으로 쿼리 결과를 검색할 수 있습니다. 검색 작업을 수행한 후 애플리케이션은 커서를 가져올 수 있습니다. 커서는 마지막으로 검색된 결과의 색인 위치를 표시하는 불투명한 바이트 문자열입니다. 애플리케이션은 이 문자열을 Datastore 모드 데이터베이스나 캐시 등에 저장(또는 base-64 인코딩 HTTP GET 또는 POST 매개변수로 웹페이지에 포함)한 후 후속 검색 작업의 시작 지점으로 커서를 사용하여 이전 검색이 끝난 지점에서 다음 배치의 결과를 얻을 수 있습니다. 검색 시 끝 커서를 지정하여 반환되는 결과 집합의 범위를 제한할 수도 있습니다.

다음 예에서는 페이지 매김을 위한 커서 사용을 보여 줍니다.

C#

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore C# API 참조 문서를 참조하세요.

Query query = new Query("Task")
{
    Limit = pageSize,
};
if (!string.IsNullOrEmpty(pageCursor))
    query.StartCursor = ByteString.FromBase64(pageCursor);

return _db.RunQuery(query).EndCursor?.ToBase64();

Go

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Go API 참조 문서를 참조하세요.

const pageSize = 5
query := datastore.NewQuery("Tasks").Limit(pageSize)
if cursorStr != "" {
	cursor, err := datastore.DecodeCursor(cursorStr)
	if err != nil {
		log.Fatalf("Bad cursor %q: %v", cursorStr, err)
	}
	query = query.Start(cursor)
}

// Read the tasks.
var tasks []Task
var task Task
it := client.Run(ctx, query)
_, err := it.Next(&task)
for err == nil {
	tasks = append(tasks, task)
	_, err = it.Next(&task)
}
if err != iterator.Done {
	log.Fatalf("Failed fetching results: %v", err)
}

// Get the cursor for the next page of results.
nextCursor, err := it.Cursor()

자바

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Java API 참조 문서를 참조하세요.

EntityQuery.Builder queryBuilder = Query.newEntityQueryBuilder().setKind("Task")
    .setLimit(pageSize);
if (pageCursor != null) {
  queryBuilder.setStartCursor(pageCursor);
}
QueryResults<Entity> tasks = datastore.run(queryBuilder.build());
while (tasks.hasNext()) {
  Entity task = tasks.next();
  // do something with the task
}
Cursor nextPageCursor = tasks.getCursorAfter();

Node.js

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Node.js API 참조 문서를 참조하세요.

// By default, google-cloud-node will automatically paginate through all of
// the results that match a query. However, this sample implements manual
// pagination using limits and cursor tokens.
async function runPageQuery(pageCursor) {
  let query = datastore.createQuery('Task').limit(pageSize);

  if (pageCursor) {
    query = query.start(pageCursor);
  }
  const results = await datastore.runQuery(query);
  const entities = results[0];
  const info = results[1];

  if (info.moreResults !== Datastore.NO_MORE_RESULTS) {
    // If there are more results to retrieve, the end cursor is
    // automatically set on `info`. To get this value directly, access
    // the `endCursor` property.
    const results = await runPageQuery(info.endCursor);

    // Concatenate entities
    results[0] = entities.concat(results[0]);
    return results;
  }

  return [entities, info];
}

PHP

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore PHP API 참조 문서를 참조하세요.

/**
 * Fetch a query cursor.
 *
 * @param DatastoreClient $datastore
 * @param string $pageSize
 * @param string $pageCursor
 * @return array
 */
function cursor_paging(DatastoreClient $datastore, $pageSize, $pageCursor = '')
{
    $query = $datastore->query()
        ->kind('Task')
        ->limit($pageSize)
        ->start($pageCursor);
    $result = $datastore->runQuery($query);
    $nextPageCursor = '';
    $entities = [];
    /* @var Entity $entity */
    foreach ($result as $entity) {
        $nextPageCursor = $entity->cursor();
        $entities[] = $entity;
    }
    return array(
        'nextPageCursor' => $nextPageCursor,
        'entities' => $entities
    );
}

Python

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Python API 참조 문서를 참조하세요.

def get_one_page_of_tasks(cursor=None):
    query = client.query(kind='Task')
    query_iter = query.fetch(start_cursor=cursor, limit=5)
    page = next(query_iter.pages)

    tasks = list(page)
    next_cursor = query_iter.next_page_token

    return tasks, next_cursor

Ruby

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Ruby API 참조 문서를 참조하세요.

page_size = 2
query = datastore.query("Task")
                 .limit(page_size)
tasks = datastore.run query

page_cursor = tasks.cursor

query = datastore.query("Task")
                 .limit(page_size)
                 .start(page_cursor)

GQL

해당 없음

Datastore 모드 데이터베이스는 정수 오프셋을 지원하지만 이를 사용하지 않는 것이 좋습니다. 대신 커서를 사용하세요. 오프셋을 사용하면 건너뛴 항목이 애플리케이션에 반환되는 것은 방지할 수 있지만 이러한 항목은 여전히 내부적으로 검색됩니다. 건너뛴 항목은 쿼리의 지연 시간에 영향을 주며 애플리케이션에서 검색하는 데 필요한 읽기 작업에 대한 비용이 청구됩니다. 오프셋 대신 커서를 사용하여 이러한 모든 비용이 발생하지 않도록 하세요.

커서의 제한사항

다음과 같은 제한사항이 커서에 적용됩니다.

  • 커서는 원본 쿼리가 수행된 동일한 프로젝트에서만, 그리고 동일한 쿼리를 계속하기 위해서만 사용할 수 있습니다. 원래 생성된 것과 동일한 쿼리를 설정하지 않으면 커서를 사용하여 결과를 검색할 수 없습니다.
  • 다음 항목 중 하나가 변경되면 후속 검색 시 여전히 커서를 사용할 수 있습니다.
    • 시작 커서
    • 끝 커서
    • 오프셋
    • 제한
  • 다음 항목 하나가 변경되면 후속 검색 시 커서를 사용할 수 없습니다.
    • 프로젝션
    • 종류
    • 상위
    • 필터
    • distinct on
    • 정렬 순서

      원본 쿼리의 최종 정렬 순서가 __key__에 있는 경우는 예외입니다. 이런 경우 역순 쿼리에 커서를 사용할 수 있습니다. 이 역순 쿼리는 각 정렬 순서가 반대인 원본 쿼리입니다. 역순 쿼리는 시작 커서, 끝 커서, 오프셋, 제한을 수정할 수 있습니다.

  • 커서는 다중 값이 있는 속성에 대해 비균등 필터나 정렬 순서를 사용하는 쿼리에서 항상 예상대로 작동하지는 않습니다. 이러한 다중 값 속성에 대한 중복 제거 로직은 검색 간에 지속되지 않으므로, 동일한 결과가 한 번 이상 반환될 수 있습니다.
  • 새로운 Datastore 모드 출시 버전에서 내부 상세 구현이 변경되면 여기에 의존하는 커서가 무효화될 수 있습니다. 애플리케이션이 더 이상 유효하지 않은 커서를 사용하려고 하면 Datastore 모드의 Cloud Firestore에서 예외가 발생합니다.

커서 및 데이터 업데이트

커서는 마지막 결과가 반환된 후 결과 목록에서의 위치를 나타냅니다. 커서는 목록 내의 상대 위치(오프셋)가 아니라 결과에 대한 색인 스캔 시작 시 Datastore 모드 데이터베이스가 점프할 수 있는 곳의 마커입니다. 커서를 사용하지 않는 사이에 쿼리 결과가 변경되면 쿼리는 커서 뒤에 있는 결과에서 발생하는 변경 사항만 인식합니다. 쿼리의 커서 위치 앞에 새 결과가 나타날 경우 커서 뒤에 해당 결과를 가져오면 반환되지 않습니다. 마찬가지로 항목이 더 이상 쿼리의 결과가 아니지만 커서 앞에 나타나도 커서 뒤에 나타나는 결과는 변경되지 않습니다. 마지막으로 반환된 결과가 결과 집합에서 삭제되더라도 커서는 여전히 다음 결과를 찾을 수 있습니다.

쿼리 결과를 검색할 때 시작 커서와 끝 커서를 모두 사용하여 연속적인 결과 그룹을 반환할 수 있습니다. 시작 커서와 끝 커서를 사용하여 결과를 검색할 때는 결과의 크기가 커서를 생성했을 때와 반드시 동일하지는 않습니다. 커서가 생성된 후 쿼리에서 사용되기 전에 데이터베이스에서 항목이 추가되거나 삭제될 수 있습니다.

쿼리 제한사항

색인 쿼리 메커니즘은 특성상 쿼리가 수행할 수 있는 역할에 특정한 제한을 둡니다. Datastore 모드 쿼리는 하위 문자열 일치, 대소문자를 구분하지 않는 일치 또는 전체 텍스트 검색을 지원하지 않습니다. NOT, OR, != 연산자는 기본적으로 지원되지 않지만 일부 클라이언트 라이브러리에서는 Datastore 모드의 맨 위에 이 지원을 추가하기도 합니다. 제한사항은 다음과 같습니다.

쿼리에서 명명된 속성이 없는 항목은 무시됨

동일한 종류의 항목이 반드시 동일한 속성을 가질 필요는 없습니다. 유효한 쿼리 결과를 얻으려면 항목에는 쿼리의 필터와 정렬 순서에 명명된 모든 속성에 값이 있어야 합니다(null 가능). 그렇지 않으면 쿼리를 실행하기 위해 사용된 색인에서 항목이 생략되므로 쿼리의 결과에 포함되지 않습니다.

색인이 생성되지 않은 속성을 필터링하면 결과가 반환되지 않음

쿼리는 색인이 생성되지 않은 속성 값을 찾을 수 없으며 그러한 속성을 정렬할 수도 없습니다. 색인이 생성되지 않은 속성에 대한 자세한 내용은 색인이 생성되지 않은 속성 섹션을 참조하세요.

비균등 필터는 한 가지 속성 이하로 제한됨

전체 색인을 검색할 필요가 없도록 쿼리 메커니즘은 색인에서 서로 인접해 있는 모든 잠재적 쿼리 결과에 의존합니다. 이 제약조건을 만족하기 위해 단일 쿼리는 모든 필터에서 둘 이상의 속성에 비균등 비교(LESS_THAN, LESS_THAN_OR_EQUAL, GREATER_THAN, GREATER_THAN_OR_EQUAL)를 사용할 수 없습니다. 예를 들어 두 비균등 필터가 모두 동일한 속성에 적용되므로 다음 쿼리는 유효합니다.

C#

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore C# API 참조 문서를 참조하세요.

Query query = new Query("Task")
{
    Filter = Filter.And(Filter.GreaterThan("created", _startDate),
        Filter.LessThan("created", _endDate))
};

Go

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Go API 참조 문서를 참조하세요.

query := datastore.NewQuery("Task").
	Filter("Created >", time.Date(1990, 1, 1, 0, 0, 0, 0, time.UTC)).
	Filter("Created <", time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC))

자바

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Java API 참조 문서를 참조하세요.

Query<Entity> query = Query.newEntityQueryBuilder()
    .setKind("Task")
    .setFilter(CompositeFilter.and(
        PropertyFilter.gt("created", startDate), PropertyFilter.lt("created", endDate)))
    .build();

Node.js

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Node.js API 참조 문서를 참조하세요.

const query = datastore
  .createQuery('Task')
  .filter('created', '>', new Date('1990-01-01T00:00:00z'))
  .filter('created', '<', new Date('2000-12-31T23:59:59z'));

PHP

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore PHP API 참조 문서를 참조하세요.

$query = $datastore->query()
    ->kind('Task')
    ->filter('created', '>', new DateTime('1990-01-01T00:00:00z'))
    ->filter('created', '<', new DateTime('2000-12-31T23:59:59z'));

Python

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Python API 참조 문서를 참조하세요.

start_date = datetime.datetime(1990, 1, 1)
end_date = datetime.datetime(2000, 1, 1)
query = client.query(kind='Task')
query.add_filter(
    'created', '>', start_date)
query.add_filter(
    'created', '<', end_date)

Ruby

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Ruby API 참조 문서를 참조하세요.

query = datastore.query("Task")
                 .where("created", ">=", Time.utc(1990, 1, 1))
                 .where("created", "<", Time.utc(2000, 1, 1))

GQL


SELECT * FROM Task
WHERE created > DATETIME('1990-01-01T00:00:00z')
  AND created < DATETIME('2000-12-31T23:59:59z')

그러나 이 쿼리는 서로 다른 두 속성에 비균등 필터를 사용하므로 유효하지 않습니다.

C#

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore C# API 참조 문서를 참조하세요.

Query query = new Query("Task")
{
    Filter = Filter.And(Filter.GreaterThan("created", _startDate),
        Filter.GreaterThan("priority", 3))
};

Go

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Go API 참조 문서를 참조하세요.

query := datastore.NewQuery("Task").
	Filter("Created >", time.Date(1990, 1, 1, 0, 0, 0, 0, time.UTC)).
	Filter("Priority >", 3)

자바

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Java API 참조 문서를 참조하세요.

Query<Entity> query = Query.newEntityQueryBuilder()
    .setKind("Task")
    .setFilter(CompositeFilter.and(
        PropertyFilter.gt("created", startDate), PropertyFilter.gt("priority", 3)))
    .build();

Node.js

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Node.js API 참조 문서를 참조하세요.

const query = datastore
  .createQuery('Task')
  .filter('priority', '>', 3)
  .filter('created', '>', new Date('1990-01-01T00:00:00z'));

PHP

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore PHP API 참조 문서를 참조하세요.

$query = $datastore->query()
    ->kind('Task')
    ->filter('priority', '>', 3)
    ->filter('created', '>', new DateTime('1990-01-01T00:00:00z'));

Python

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Python API 참조 문서를 참조하세요.

start_date = datetime.datetime(1990, 1, 1)
query = client.query(kind='Task')
query.add_filter(
    'created', '>', start_date)
query.add_filter(
    'priority', '>', 3)

Ruby

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Ruby API 참조 문서를 참조하세요.

query = datastore.query("Task")
                 .where("created", ">=", Time.utc(1990, 1, 1))
                 .where("priority", ">", 3)

GQL


# Invalid query!
SELECT * FROM Task
WHERE created > DATETIME('1990-01-01T00:00:00z')
AND priority > 3

하나의 쿼리에서 여러 속성에 대한 균등(EQUAL) 필터와 단일 속성에 대한 하나 이상의 비균등 필터를 함께 사용할 수 있습니다. 따라서 다음 쿼리는 유효합니다.

C#

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore C# API 참조 문서를 참조하세요.

Query query = new Query("Task")
{
    Filter = Filter.And(Filter.Equal("priority", 4),
        Filter.GreaterThan("created", _startDate),
        Filter.LessThan("created", _endDate))
};

Go

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Go API 참조 문서를 참조하세요.

query := datastore.NewQuery("Task").
	Filter("Priority =", 4).
	Filter("Done =", false).
	Filter("Created >", time.Date(1990, 1, 1, 0, 0, 0, 0, time.UTC)).
	Filter("Created <", time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC))

자바

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Java API 참조 문서를 참조하세요.

Query<Entity> query = Query.newEntityQueryBuilder()
    .setKind("Task")
    .setFilter(CompositeFilter.and(PropertyFilter.eq("priority", 4),
        PropertyFilter.gt("created", startDate), PropertyFilter.lt("created", endDate)))
    .build();

Node.js

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Node.js API 참조 문서를 참조하세요.

const query = datastore
  .createQuery('Task')
  .filter('priority', '=', 4)
  .filter('done', '=', false)
  .filter('created', '>', new Date('1990-01-01T00:00:00z'))
  .filter('created', '<', new Date('2000-12-31T23:59:59z'));

PHP

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore PHP API 참조 문서를 참조하세요.

$query = $datastore->query()
    ->kind('Task')
    ->filter('priority', '=', 4)
    ->filter('done', '=', false)
    ->filter('created', '>', new DateTime('1990-01-01T00:00:00z'))
    ->filter('created', '<', new DateTime('2000-12-31T23:59:59z'));

Python

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Python API 참조 문서를 참조하세요.

start_date = datetime.datetime(1990, 1, 1)
end_date = datetime.datetime(2000, 12, 31, 23, 59, 59)
query = client.query(kind='Task')
query.add_filter('priority', '=', 4)
query.add_filter('done', '=', False)
query.add_filter(
    'created', '>', start_date)
query.add_filter(
    'created', '<', end_date)

Ruby

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Ruby API 참조 문서를 참조하세요.

query = datastore.query("Task")
                 .where("done", "=", false)
                 .where("priority", "=", 4)
                 .where("created", ">=", Time.utc(1990, 1, 1))
                 .where("created", "<", Time.utc(2000, 1, 1))

GQL


SELECT * FROM Task
WHERE priority = 4
  AND done = FALSE
  AND created > DATETIME('1990-01-01T00:00:00z')
  AND created < DATETIME('2000-12-31T23:59:59z')

정렬 순서를 지정하지 않으면 쿼리 결과의 순서가 정의되지 않음

쿼리에 정렬 순서가 지정되지 않으면 결과가 검색되는 순서대로 반환됩니다. Datastore 모드 구현이 달라지거나 프로젝트의 색인이 변경되면 이 순서가 바뀔 수 있습니다. 따라서 애플리케이션에서 특정한 순서로 쿼리 결과가 필요하다면 정렬 순서를 쿼리에 명시적으로 지정해야 합니다.

속성에 일치 필터가 있으면 정렬 순서가 무시됨

쿼리는 지정된 속성에 일치 필터가 있으면 해당 속성에 지정된 모든 정렬 순서도 무시합니다. 그러면 모든 결과에서 속성의 값이 동일하고 더 이상 정렬할 필요가 없으므로 단일 값 속성의 불필요한 처리를 줄여 간단하게 최적화할 수 있습니다. 그러나 다중 값 속성은 일치 필터로 일치된 값 외에 다른 값도 가질 수 있습니다. 이러한 경우는 매우 드물 뿐 아니라 정렬 순서를 적용하려면 비용이 많이 들고 추가 색인이 필요하므로 Datastore 모드 쿼리 플래너는 다중 값 속성의 경우에도 정렬 순서를 무시합니다. 따라서 지정된 정렬 순서와 다른 순서로 쿼리 결과가 반환될 수 있습니다.

불일치 필터에 사용되는 속성이 먼저 정렬되어야 함

불일치 필터와 일치하는 모든 결과를 검색하기 위해 쿼리는 필터와 일치하는 첫 번째 행을 색인에서 검색한 후 일치하지 않는 행이 나올 때까지 검색을 진행합니다. 전체 결과 집합을 연속된 행에 포함하려면 다른 속성보다 먼저 비균등 필터에 사용되는 속성에 따라 행이 정렬되어야 합니다. 따라서 쿼리에 하나 이상의 비균등 필터와 하나 이상의 정렬 순서가 함께 지정된 경우 첫 번째 정렬 순서는 비균등 필터에 지정된 속성을 참조해야 합니다. 다음은 유효한 쿼리입니다.

C#

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore C# API 참조 문서를 참조하세요.

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

Go

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Go API 참조 문서를 참조하세요.

query := datastore.NewQuery("Task").
	Filter("Priority >", 3).
	Order("Priority").
	Order("Created")

자바

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Java API 참조 문서를 참조하세요.

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

Node.js

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Node.js API 참조 문서를 참조하세요.

const query = datastore
  .createQuery('Task')
  .filter('priority', '>', 3)
  .order('priority')
  .order('created');

PHP

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore PHP API 참조 문서를 참조하세요.

$query = $datastore->query()
    ->kind('Task')
    ->filter('priority', '>', 3)
    ->order('priority')
    ->order('created');

Python

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Python API 참조 문서를 참조하세요.

query = client.query(kind='Task')
query.add_filter('priority', '>', 3)
query.order = ['priority', 'created']

Ruby

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Ruby API 참조 문서를 참조하세요.

query = datastore.query("Task")
                 .where("priority", ">", 3)
                 .order("priority")
                 .order("created")

GQL


SELECT * FROM Task WHERE priority > 3 ORDER BY priority, created

이 쿼리는 비균등 필터에 사용되는 속성을 정렬하지 않으므로 유효하지 않습니다.

C#

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore C# API 참조 문서를 참조하세요.

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

Go

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Go API 참조 문서를 참조하세요.

query := datastore.NewQuery("Task").
	Filter("Priority >", 3).
	Order("Created")

자바

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Java API 참조 문서를 참조하세요.

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

Node.js

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Node.js API 참조 문서를 참조하세요.

const query = datastore
  .createQuery('Task')
  .filter('priority', '>', 3)
  .order('created');

PHP

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore PHP API 참조 문서를 참조하세요.

$query = $datastore->query()
    ->kind('Task')
    ->filter('priority', '>', 3)
    ->order('created');

Python

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Python API 참조 문서를 참조하세요.

query = client.query(kind='Task')
query.add_filter('priority', '>', 3)
query.order = ['created']

Ruby

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Ruby API 참조 문서를 참조하세요.

query = datastore.query("Task")
                 .where("priority", ">", 3)
                 .order("created")

GQL


# Invalid query!
SELECT * FROM Task WHERE priority > 3 ORDER BY created

마찬가지로 비균등 필터에 사용되는 속성이 첫 번째로 정렬되는 속성이 아니므로 이 쿼리는 유효하지 않습니다.

C#

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore C# API 참조 문서를 참조하세요.

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

Go

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Go API 참조 문서를 참조하세요.

query := datastore.NewQuery("Task").
	Filter("Priority >", 3).
	Order("Created").
	Order("Priority")

자바

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Java API 참조 문서를 참조하세요.

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

Node.js

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Node.js API 참조 문서를 참조하세요.

const query = datastore
  .createQuery('Task')
  .filter('priority', '>', 3)
  .order('created')
  .order('priority');

PHP

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore PHP API 참조 문서를 참조하세요.

$query = $datastore->query()
    ->kind('Task')
    ->filter('priority', '>', 3)
    ->order('created')
    ->order('priority');

Python

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Python API 참조 문서를 참조하세요.

query = client.query(kind='Task')
query.add_filter('priority', '>', 3)
query.order = ['created', 'priority']

Ruby

Cloud Datastore용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud Datastore 클라이언트 라이브러리를 참조하세요. 자세한 내용은 Cloud Datastore Ruby API 참조 문서를 참조하세요.

query = datastore.query("Task")
                 .where("priority", ">", 3)
                 .order("created")
                 .order("priority")

GQL


# Invalid query!
SELECT * FROM Task WHERE priority > 3 ORDER BY created, priority

트랜잭션 내부의 쿼리는 상위 쿼리여야 함

Datastore 모드 트랜잭션은 최대 25개의 항목 그룹에 속한 항목을 대상으로 작동하지만 트랜잭션 내부의 쿼리는 상위 쿼리여야 합니다. 트랜잭션 내부에서 수행되는 모든 쿼리의 경우 상위 항목을 지정해야 합니다. 자세한 내용은 트랜잭션을 참조하세요.

프로젝션 제한사항

프로젝션 쿼리에는 다음과 같은 제한사항이 적용됩니다.

  • 색인이 생성된 속성만 프로젝션할 수 있습니다.

    프로젝션은 1500바이트보다 긴 문자열, 1500개가 넘는 요소가 포함된 바이트 배열, 색인이 생성되지 않음으로 명시적으로 표시된 다른 속성을 지원하지 않습니다.

  • 동일한 속성을 두 번 이상 프로젝션할 수 없습니다.

  • 균등 필터에 참조된 속성을 프로젝션할 수 없습니다.

    예를 들면 다음과 같습니다.

    SELECT tag FROM Task WHERE priority = 1
    

    위의 쿼리에는 프로젝션된 속성이 균등 필터에 사용되지 않아 유효합니다.

    SELECT tag FROM Task WHERE tag > 'fun`
    

    위의 쿼리에는 균등 필터가 사용되지 않았지만

    SELECT tag FROM Task WHERE tag = 'fun`
    

    위의 쿼리는 프로젝션된 속성이 균등 필터에 사용되었으므로 유효하지 않습니다.

  • 프로젝션 쿼리에서 반환된 결과를 Datastore 모드 데이터베이스에 다시 저장해서는 안 됩니다.

    쿼리는 일부만 채워진 결과를 반환하므로 이 결과를 다시 Datastore 모드 데이터베이스에 쓰면 안 됩니다.

    • 프로젝션 쿼리는 타임스탬프를 정수로 변환합니다.

    프로젝션 쿼리 결과에서 Datastore 모드는 타임스탬프 값을 마이크로초 정수 값으로 변환합니다.

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

Cloud Datastore 문서