-
[FLUTTER/Firebase] Firestore 연동 데이터 쿼리 설명 및 코드앱 개발/Flutter 2019. 12. 31. 14:52반응형
이전 포스팅에서는 Flutter에 대한 Firestore 연동 데이터 추가 및 관리 코드를 작성했다.
2019/12/31 - [앱 개발/Flutter] - [FLUTTER/Firebase] Firestore 연동 데이터 추가 및 관리 코드
이번 포스팅에서는 firestore의 데이터를 쿼리하기 위한 설명 및 flutter dart 코드를 작성한다.
https://firebase.google.com/docs/firestore/query-data/queries
1. 단순쿼리
쿼리 객체를 만든 뒤 getDocuments 함수를 사용하여 결과를 검색한다.
Firestore.instance .collection('talks') .where("topic", isEqualTo: "flutter") .getDocuments().then((QuerySnapshot ds) { ds.documents.forEach((doc) => print(doc["title"])); });
-
쿼리 연산자 (비교 / 배열)
Firestore.instance .collection('talks') .where("topic", isEqualTo: "flutter") Firestore.instance .collection('talks') .where("topic", isGreaterThan: "flutter") Firestore.instance .collection('talks') .where("topic", isLessThan: "flutter")
Firestore.instance .collection('talks') .where("topic", arrayContains: "flutter")
2. 복합쿼리
- 여러 조건에 대한 쿼리를 작성하기 위해 where()를 연결한다.
- 단, 필드 1개에 대해서만 범위를 비교 (<, <=, >, >=) 할 수 있다.
- 복합필터에는 array-contains 절을 한 개만 포함할 수 있다.
- 잘못된 예시
Firestore.instance .collection('State') .where("state", isGreaterThanOrEqualTo: "CA").where("population", isLessThan: "100000")
- 올바른 예시
Firestore.instance .collection('State') .where("state", isEqualTo: "CA").where("population", isLessThan: "100000") Firestore.instance .collection('State') .where("population", isGreaterThanOrEqualTo: "100").where("population", islessThanOrEqualTo: "100000")
쿼리의 제한사항
- 여러 필드에 범위 필터가 있는 쿼리는 사용할 수 없다.
- 논리적 OR 쿼리: 이 경우 각 OR 조건에 해당하는 별도의 쿼리를 만들고 앱에서 쿼리 결과를 병합해야 한다.
- != 절을 사용하는 쿼리: 이 경우 쿼리를 초과 및 미만 쿼리로 분할해야 한다. 예를 들어 where("age", "!=", "30") 쿼리 절은 지원되지 않지만 where("age", "<", "30") 절이 있는 쿼리 하나와 where("age", ">", 30) 절이 있는 쿼리 하나를 결합하면 동일한 결과 집합을 얻을 수 있다.3. 데이터 정렬 및 제한
- orderBy()를 사용하여 데이터의 정렬순서를 지정한다.
- limit()를 사용하여 검색된 문서 수를 제한한다.
Firestore.instance.collection("item"). orderBy('createdAt', descending: true). limit(3); //여러 필드를 기준으로 나열 Firestore.instance.collection("item"). orderBy('createdAt', descending: true). orderBy('name', descending: true). //필터에 범위 비교(<, <=, >, >=)가 포함된 경우 동일한 필드를 기준으로 1차 정렬이 이루어져야함 Firestore.instance.collection("item"). where("state", isGreaterThanOrEqualTo: "CA"). orderBy("state")
- startAt() : 시작점을 포함하여 반환한다.
- startAfter() : 시작점을 제외하여 반환한다.
- endAt() : 끝 점을 포함한 쿼리 결과에 대한 엔드포인트를 정의한다.
- endBefore() : 끝 점을 포함하지 않는 엔드 포인트를 정의한다.
쿼리 데이터 페이지화 시 유용
Firestore.instance.collection("item"). orderBy("dateTime"). startAt([startAtTimestamp])
반응형'앱 개발 > Flutter' 카테고리의 다른 글
[Flutter] Material Design Components - layout (app bar / navigation) (0) 2021.01.11 flutter 차트 패키지 (syncfusion_flutter_charts) (0) 2021.01.04 [FLUTTER] 스크린 방향 설정 (0) 2020.01.21 [FLUTTER/Firebase] Firestore 연동 데이터 추가 및 관리 코드 (0) 2019.12.31 [안드로이드 스튜디오] 최신버전 안드로이드 스튜디오 로그캣 실행 (0) 2019.12.31 -