Cloud Firestore는 컬렉션에서 검색할 문서를 지정할 수 있는 강력한 쿼리 기능을 제공합니다. 데이터 가져오기에 설명된 대로 이러한 쿼리를 get()
또는 addSnapshotListener()
와 함께 사용할 수도 있습니다.
데이터 정렬 및 제한
기본적으로 쿼리는 쿼리 조건에 맞는 모든 문서를 문서 ID에 따라 오름차순으로 검색합니다. orderBy()
를 사용하여 데이터의 정렬 순서를 지정하고 limit()
를 사용하여 검색된 문서 수를 제한할 수 있습니다. limit()
를 지정하는 경우 값은 0보다 크거나 같아야 합니다.
예를 들어 알파벳순으로 처음 3개 도시를 쿼리하는 방법은 다음과 같습니다.
Web
import { query, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, orderBy("name"), limit(3));
Web
citiesRef.orderBy("name").limit(3);
Swift
citiesRef.order(by: "name").limit(to: 3)
Objective-C
[[citiesRef queryOrderedByField:@"name"] queryLimitedTo:3];
Kotlin+KTX
citiesRef.orderBy("name").limit(3)
Java
citiesRef.orderBy("name").limit(3);
Dart
final citiesRef = db.collection("cities"); citiesRef.orderBy("name").limit(3);
Java
Python
Python
C++
cities_ref.OrderBy("name").Limit(3);
Node.js
Go
PHP
PHP
Cloud Firestore 클라이언트 설치 및 생성에 관한 자세한 내용은 Cloud Firestore 클라이언트 라이브러리를 참조하세요.
Unity
Query query = citiesRef.OrderBy("Name").Limit(3);
C#
Ruby
내림차순으로 정렬하여 마지막 3개 도시를 가져올 수도 있습니다.
Web
import { query, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, orderBy("name", "desc"), limit(3));
Web
citiesRef.orderBy("name", "desc").limit(3);
Swift
citiesRef.order(by: "name", descending: true).limit(to: 3)
Objective-C
[[citiesRef queryOrderedByField:@"name" descending:YES] queryLimitedTo:3];
Kotlin+KTX
citiesRef.orderBy("name", Query.Direction.DESCENDING).limit(3)
Java
citiesRef.orderBy("name", Direction.DESCENDING).limit(3);
Dart
final citiesRef = db.collection("cities"); citiesRef.orderBy("name", descending: true).limit(3);
Java
Python
Python
C++
cities_ref.OrderBy("name", Query::Direction::kDescending).Limit(3);
Node.js
Go
PHP
PHP
Cloud Firestore 클라이언트 설치 및 생성에 관한 자세한 내용은 Cloud Firestore 클라이언트 라이브러리를 참조하세요.
Unity
Query query = citiesRef.OrderByDescending("Name").Limit(3);
C#
Ruby
여러 필드를 기준으로 정렬할 수도 있습니다. 예를 들어 주를 기준으로 정렬한 후 각 주 안에서 인구에 따라 내림차순으로 정렬하는 방법은 다음과 같습니다.
Web
import { query, orderBy } from "firebase/firestore"; const q = query(citiesRef, orderBy("state"), orderBy("population", "desc"));
Web
citiesRef.orderBy("state").orderBy("population", "desc");
Swift
citiesRef .order(by: "state") .order(by: "population", descending: true)
Objective-C
[[citiesRef queryOrderedByField:@"state"] queryOrderedByField:@"population" descending:YES];
Kotlin+KTX
citiesRef.orderBy("state").orderBy("population", Query.Direction.DESCENDING)
Java
citiesRef.orderBy("state").orderBy("population", Direction.DESCENDING);
Dart
final citiesRef = db.collection("cities"); citiesRef.orderBy("state").orderBy("population", descending: true);
Java
Python
Python
C++
cities_ref.OrderBy("state").OrderBy("name", Query::Direction::kDescending);
Node.js
Go
PHP
PHP
Cloud Firestore 클라이언트 설치 및 생성에 관한 자세한 내용은 Cloud Firestore 클라이언트 라이브러리를 참조하세요.
Unity
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
C#
Ruby
where()
필터를 orderBy()
및 limit()
와 결합할 수 있습니다. 다음 예시의 쿼리에서는 인구 기준을 정의하고, 인구를 오름차순으로 정렬하며, 기준을 초과하는 처음 몇 개의 결과만 반환합니다.
Web
import { query, where, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, where("population", ">", 100000), orderBy("population"), limit(2));
Web
citiesRef.where("population", ">", 100000).orderBy("population").limit(2);
Swift
citiesRef .whereField("population", isGreaterThan: 100000) .order(by: "population") .limit(to: 2)
Objective-C
[[[citiesRef queryWhereField:@"population" isGreaterThan:@100000] queryOrderedByField:@"population"] queryLimitedTo:2];
Kotlin+KTX
citiesRef.whereGreaterThan("population", 100000).orderBy("population").limit(2)
Java
citiesRef.whereGreaterThan("population", 100000).orderBy("population").limit(2);
Dart
final citiesRef = db.collection("cities"); citiesRef .where("population", isGreaterThan: 100000) .orderBy("population") .limit(2);
Java
Python
Python
C++
cities_ref.WhereGreaterThan("population", FieldValue::Integer(100000)) .OrderBy("population") .Limit(2);
Node.js
Go
PHP
PHP
Cloud Firestore 클라이언트 설치 및 생성에 관한 자세한 내용은 Cloud Firestore 클라이언트 라이브러리를 참조하세요.
Unity
Query query = citiesRef .WhereGreaterThan("Population", 2500000) .OrderBy("Population") .Limit(2);
C#
Ruby
그러나 필터에 범위 비교(<
, <=
, >
, >=
)가 포함된 경우 동일한 필드를 기준으로 1차 정렬이 이루어져야 합니다. 아래의 orderBy()
제한사항 목록을 참조하세요.
제한사항
orderBy()
절에는 다음과 같은 제한사항이 있습니다.
orderBy()
절은 특정 필드의 존재 여부도 필터링합니다. 결과 집합에는 지정된 필드가 포함되지 않은 문서가 제외됩니다.
orderBy
및 존재 여부
특정 필드를 기준으로 쿼리를 정렬할 때 쿼리는 정렬 기준 필드가 있는 문서만 반환할 수 있습니다.
예를 들어 다음 쿼리는 쿼리 필터를 충족하더라도 population
필드가 설정되지 않은 문서를 반환하지 않습니다.
Java
db.collection("cities").whereEqualTo("country", “USA”).orderBy(“population”);
관련 효과는 부등식에 적용됩니다. 필드에 부등식 필터가 있는 쿼리는 해당 필드를 기준으로 한 정렬도 포함합니다. 다음 쿼리는 해당 문서에 country = USA
가 있더라도 population
필드가 없는 문서를 반환하지 않습니다. 이 문제를 해결하려면 각 정렬마다 별도의 쿼리를 실행하거나 정렬하는 모든 필드에 값을 할당할 수 있습니다.
Java
db.collection(“cities”).where(or(“country”, USA”), greaterThan(“population”, 250000));
위 쿼리는 부등식에 대한 묵시적 정렬 기준을 포함하며 다음과 같습니다.
Java
db.collection(“cities”).where(or(“country”, USA”), greaterThan(“population”, 250000)).orderBy(“population”);