반응형
- 일반 쿼리와 같이 특정 조건에 맞는 데이터를 찾고자할때 where를 사용한다.
- 예를 들어 현재 시간과 같거나 이전에 등록된 상품을 조회한다고 한다면 아래와 같이 쓰게 된다.
var snapshot = await FirebaseFirestore.instance.collection('product')
.where('regTime', isLessThanOrEqualTo: DateTime.now().toString())
.get();
- 조회한 데이터를 sort시킨다고 하면 이 또한 일반 쿼리에서 사용하는 orderBy를 사용하면 된다.
- 예를 들어 등록된 시간별로 sort시켜보자.
// 내림 차순
var snapshot = await FirebaseFirestore.instance.collection('product')
.orderBy('regTime', descending: true)
.get();
// 오름 차순
var snapshot = await FirebaseFirestore.instance.collection('product')
.orderBy('regTime')
.get();
- 만약 sort 조건으로 두가지 이상을 사용한다고 하면 orderBy 뒤에 추가로 .orderBy(${field})를 추가해주면 된다.
- 단 firebase는 단일 필드에 대한 인덱스는 자동으로 제공하지만 두가지 이상에 대해서는 직접 색인(index)를 추가해주어야 한다.
- 그럼 where와 orderBy를 같이 사용하려고 한다면 어떻게 될까?
var snapshot = await FirebaseFirestore.instance.collection('product')
.where('regTime', isLessThanOrEqualTo: DateTime.now().toString())
.orderBy('productName', descending: true).orderBy('price')
.limit(5)
.get();
- 위의 코드와 같이 where조건과 orderBy를 진행했으나 원하는 결과가 아닌 오류가 발생하였다.
Failed assertion: line 487 pos 13: 'conditionField == orders[0][0]':
The initial orderBy() field "[[FieldPath([productName]), true]][0][0]"
has to be the same as the where() field parameter "FieldPath([regTime])"
when an inequality operator is invoked.
- where절에 사용한 parameter와 뒤에 이어지는 orderBy가 같아야 한다는 의미 메시지를 던져주게 된다.
- 결과적으로 where와 orderBy를 같이 사용할때는 where절에 사용한 필드에 대한 orderBy가 바로 뒤에 따라오고 그 다음에 원하는 orderBy를 사용해야만 한다.
var snapshot = await FirebaseFirestore.instance.collection('product')
.where('regTime', isLessThanOrEqualTo: DateTime.now().toString())
.orderBy('regTime', descending: true)
.orderBy('productName', descending: true).orderBy('price')
.limit(5)
.get();
- 그리고 저렇게 된다면 where절에 사용한 필드를 orderBy에 사용했기때문에 firebase의 색인에 위의 코드에서 orderBy에 사용한 세가지 필드의 sort조건에 맞는 색인을 만들어 두어야 한다.
728x90
반응형
'개발라이프' 카테고리의 다른 글
[Flutter] ListView 내부에 PageView적용하기 - builder 사용시 발생할 수 있는 문제 (0) | 2023.02.09 |
---|---|
ChatGPT로 플러터 소스 생성해보기 (0) | 2023.01.31 |
apk 직접 설치 후 열기 버튼 비활성화 문제 (0) | 2022.11.17 |
SSH 접속시 발생하는 Host key verification failed 오류 (0) | 2022.11.10 |
Flutter 삼항연산자 vs 이중물음표(??) (0) | 2022.10.11 |