데이터 순서 지정 및 제한
Firestore는 컬렉션에서 검색할 문서를 지정할 수 있는 강력한 쿼리 기능을 제공합니다. 데이터 가져오기의 설명대로 이러한 쿼리를 get()
또는 addSnapshotListener()
와 함께 사용할 수도 있습니다.
데이터 정렬 및 제한
기본적으로 쿼리는 쿼리 조건에 맞는 모든 문서를 문서 ID에 따라 오름차순으로 검색합니다. orderBy()
를 사용하여 데이터의 정렬 순서를 지정하고 limit()
를 사용하여 검색된 문서 수를 제한할 수 있습니다. limit()
를 지정하는 경우 값은 0보다 크거나 같아야 합니다.
예를 들어 알파벳순으로 처음 3개 도시를 쿼리하는 방법은 다음과 같습니다.
웹 버전 9
import { query, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, orderBy("name"), limit(3));
웹 버전 8
citiesRef.orderBy("name").limit(3);
Swift
citiesRef.order(by: "name").limit(to: 3)
Objective-C
[[citiesRef queryOrderedByField:@"name"] queryLimitedTo:3];
Kotlin+KTX
Android
citiesRef.orderBy("name").limit(3)
자바
Android
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
Firestore에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
Unity
Query query = citiesRef.OrderBy("Name").Limit(3);
C#
Ruby
내림차순으로 정렬하여 마지막 3개 도시를 가져올 수도 있습니다.
웹 버전 9
import { query, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, orderBy("name", "desc"), limit(3));
웹 버전 8
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
Android
citiesRef.orderBy("name", Query.Direction.DESCENDING).limit(3)
자바
Android
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
Firestore에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
Unity
Query query = citiesRef.OrderByDescending("Name").Limit(3);
C#
Ruby
여러 필드를 기준으로 정렬할 수도 있습니다. 예를 들어 주를 기준으로 정렬한 후 각 주 안에서 인구에 따라 내림차순으로 정렬하는 방법은 다음과 같습니다.
웹 버전 9
import { query, orderBy } from "firebase/firestore"; const q = query(citiesRef, orderBy("state"), orderBy("population", "desc"));
웹 버전 8
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
Android
citiesRef.orderBy("state").orderBy("population", Query.Direction.DESCENDING)
자바
Android
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
Firestore에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
Unity
Query query = citiesRef.OrderBy("State").OrderByDescending("Population");
C#
Ruby
where()
필터를 orderBy()
및 limit()
와 결합할 수 있습니다. 다음 예시의 쿼리에서는 인구 기준을 정의하고, 인구를 오름차순으로 정렬하며, 기준을 초과하는 처음 몇 개의 결과만 반환합니다.
웹 버전 9
import { query, where, orderBy, limit } from "firebase/firestore"; const q = query(citiesRef, where("population", ">", 100000), orderBy("population"), limit(2));
웹 버전 8
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
Android
citiesRef.whereGreaterThan("population", 100000).orderBy("population").limit(2)
자바
Android
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
Firestore에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
Unity
Query query = citiesRef .WhereGreaterThan("Population", 2500000) .OrderBy("Population") .Limit(2);
C#
Ruby
그러나 필터에 범위 비교(<
, <=
, >
, >=
)가 포함된 경우 동일한 필드를 기준으로 1차 정렬이 이루어져야 합니다. 아래의 orderBy()
제한사항 목록을 참조하세요.
제한사항
orderBy()
절에 대한 다음 제한사항에 유의하세요.
orderBy()
절은 특정 필드의 존재 여부도 필터링합니다. 결과 집합에는 지정된 필드가 포함되지 않은 문서가 제외됩니다.-
필터에 범위 비교(
<
,<=
,>
,>=
)가 포함된 경우 동일한 필드를 기준으로 1차 정렬이 이루어져야 합니다.올바른 방법: 동일한 필드에 범위 필터 및
orderBy
사용웹 버전 9
import { query, where, orderBy } from "firebase/firestore"; const q = query(citiesRef, where("population", ">", 100000), orderBy("population"));
웹 버전 8
citiesRef.where("population", ">", 100000).orderBy("population");
Swift
참고: 이 제품은 watchOS 및 앱 클립 대상에서 사용할 수 없습니다.citiesRef .whereField("population", isGreaterThan: 100000) .order(by: "population")
Objective-C
참고: 이 제품은 watchOS 및 앱 클립 대상에서 사용할 수 없습니다.[[citiesRef queryWhereField:@"population" isGreaterThan:@100000] queryOrderedByField:@"population"];
Kotlin+KTX
AndroidcitiesRef.whereGreaterThan("population", 100000).orderBy("population")
자바
AndroidcitiesRef.whereGreaterThan("population", 100000).orderBy("population");
Dart
final citiesRef = db.collection("cities"); citiesRef.where("population", isGreaterThan: 100000).orderBy("population");
Java
Query query = cities.whereGreaterThan("population", 2500000L).orderBy("population");
Python
Python
(비동기)Node.js
Go
PHP
PHP
Firestore에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
Unity
Query query = citiesRef .WhereGreaterThan("Population", 2500000) .OrderBy("Population");
C#
Ruby
잘못된 방법: 서로 다른 필드에 범위 필터 및 1차
orderBy
사용웹 버전 9
import { query, where, orderBy } from "firebase/firestore"; const q = query(citiesRef, where("population", ">", 100000), orderBy("country"));
웹 버전 8
citiesRef.where("population", ">", 100000).orderBy("country");
Swift
참고: 이 제품은 watchOS 및 앱 클립 대상에서 사용할 수 없습니다.citiesRef .whereField("population", isGreaterThan: 100000) .order(by: "country")
Objective-C
참고: 이 제품은 watchOS 및 앱 클립 대상에서 사용할 수 없습니다.[[citiesRef queryWhereField:@"population" isGreaterThan:@100000] queryOrderedByField:@"country"];
Kotlin+KTX
AndroidcitiesRef.whereGreaterThan("population", 100000).orderBy("country")
자바
AndroidcitiesRef.whereGreaterThan("population", 100000).orderBy("country");
Dart
final citiesRef = db.collection("cities"); citiesRef.where("population", isGreaterThan: 100000).orderBy("country");
Java
Python
Python
(비동기)C++
// BAD EXAMPLE -- will crash the program: cities_ref.WhereGreaterThan("population", FieldValue::Integer(100000)) .OrderBy("country");
Node.js
Go
PHP
PHP
Firestore에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
Unity
Query query = citiesRef .WhereGreaterThan("Population", 2500000) .OrderBy("Country");
C#
Ruby
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”);