다음과 같은 간단한 컬렉션이있는 경우 :
Fruits:
Banana:
title: "Banana"
vitamins: ["potassium","B6","C"]
Apple:
title: "Apple"
vitamins: ["A","B6","C"]
비타민 B6가 포함 된 과일을 검색하려면 다음을 수행하십시오.
db.collection("Fruits").whereField("vitamins", arrayContains: "A").getDocuments() { (querySnapshot, err) in
if let err = err {
print("Error getting documents: \(err)")
} else {
for document in querySnapshot!.documents {
print("\(document.documentID) => \(document.data())")
}
}
}
그러면 비타민 A가 포함 된 컬렉션의 모든 과일이 나에게 표시됩니다. 그러나 비타민 B6 및 C와 같이 여러 비타민이 포함 된 과일을 어떻게 검색 할 수 있습니까? 나는 단순히
["B6","C"]
를 검색 할 수 없습니다
독립 문자열이 아닌 배열을 찾고 있기 때문입니다.
Cloud Firestore에서도 가능합니까? 그렇지 않으면 다른 방법이 있습니까?
- 답변 # 1
- 답변 # 2
Firestore에서 요청한 것처럼 여러 개의 배열이 포함 된 쿼리를 수행 할 수있는 방법이 없습니다. 그러나 많은
where
를 결합 할 수 있습니다 실제로 가능한 조건. 그러므로 이것을 고려하십시오 :Fruits: Banana: title: "Banana" vitamins: potassium: true b6: true c: true
Firestore.firestore().collection("Fruits").whereField("vitamins.potassium", isEqualTo: true).whereField("vitamins.b6", isEqualTo: true)
그러나하지 않음: 깨끗한
or
를 할 수 있습니다 그냥and
를 검색 . 비타민 x 또는 비타민 y가 함유 된 과일을 쿼리하려면 더 창의력을 가져야합니다. 또한이 방법은 가능한 많은 값이 있고 복합 쿼리와 결합해야하는 상황에서 사용하지 않아야합니다. Firestore는 200 개 이상의 복합 지수를 허용하지 않으며 각 복합 지수는 정확한 비타민을 지정해야하기 때문입니다. 예를 들어vitamins.b6
에 대한 개별 복합 색인을 작성해야합니다.vitamins.potassium
등 총 200 개만 있습니다. - 답변 # 3
Firestore에는 둘 이상의
와이즈 비즈arrayContains
를 사용하여 Firestore 데이터베이스를 쿼리 할 수있는 방법이 없습니다. . 둘 이상을 사용하는 경우 다음과 같은 오류가 발생할 수 있습니다.하나 이상의 비타민을 필터링해야하는 경우 보유하고있는 각각의 개별 비타민에 대한 속성을 생성 한 다음
Invalid Query. Queries only support having a single array-contains filter.
스키마는 다음과 같아야합니다 :
.whereField()
vitamins: { "potassium": true, "B6": true, "C": true }
와 모든 과일을 찾으려면potassium
그리고B6
비타민의 경우 다음과 같은 쿼리를 사용해야합니다.C
let fruitsRef = db.collection("Fruits") .whereField("vitamins.potassium", isEqualTo: true) .whereField("vitamins.B6", isEqualTo: true) .whereField("vitamins.C", isEqualTo: true)
관련 자료
- node.js - Firestore 어레이에서 여러 요소를 동적으로 제거하는 방법은 무엇입니까?
- 배열에 여러 값이 포함되어 있는지 PHP 확인
- firebase - 어레이의 참조 확인 - firestore 보안 규칙
- javascript - 배열에 특정 요소 만 포함될 때까지 롤
- 자바 스크립트를 사용하여 다차원 배열에서 값이 0 인 경우 배열에서 요소를 제거하는 방법
- javascript - 여러 요청을 만들고 데이터 개체를 새 배열에 저장하는 방법
- javascript - Vuejs 양식은 배열에 여러 값을 가져옵니다
- vue.js - 여러 조건에 따라 배열의 항목 값을 변경하려면 어떻게해야합니까?
- java - 이진 검색 비교 트리로 배열 값 표시를 어떻게 수정할 수 있습니까?
- java - 이진 검색 비교 트리로 배열의 값을 어떻게 표시 할 수 있습니까?
- ios - 배열 내부를 검색하고 검색된 모든 데이터를 반환하는 방법
- python - 벡터화 된 방식으로 다차원 배열을 여러 번 인덱싱하는 방법 numpy?
- swift - 여러 조건으로 swiftui에서 배열 정렬
- laravel에서 여러 선택적 매개 변수를 사용하여 데이터베이스에서 검색하는 방법은 무엇입니까?
- kotlin - 코 루틴 흐름 내에서 여러 Firestore 작업 결합
- python - 그리드 검색은 다중 하이퍼 파라미터 및 다중 추정기를 사전 처리합니다
- ramda.js - 람다 - 여러 개체에서 하나의 배열 가져 오기
- MySQL은 json 데이터를 추출하고 여러 값을 검색합니다
- android - Java에서 Array의 여러 문자 바꾸기
- sql - MSSQL에서 여러 검색 문자열을 사용하여 여러 필드 필터링
- swift : 보기 모델에서보기로 데이터를 전달할 때이 오류를 해결하는 방법은 무엇입니까?
- Firebasefirestore와 Firebasefirestoreswift의 차이점은 무엇입니까?
- swift : ViewController에서 TableView를 업데이트하기 전에 별도의 데이터 클래스가 Firestore에서 데이터를 가져 오기를 기다립니다.
- Firebase Firestore, Swift에서 사전을 얻는 방법
- 부적절한 콘텐츠 SWIFT Firetbase에 대한 '보고서'기능 구현
- 셀을 탭하여 FireStore Swift에 데이터를 추가하는 방법
- javascript : 데이터를 검색하는 기능에서 2 개의 Firebase 쿼리를 실행하는 방법
- Flutter 및 Firebase : 현재 사용자 ID를 기반으로 DocumentSnapShot 가져 오기
- node.js : Firebase : 한 쿼리 내에서 동일한 문서를 업데이트하고 가져 오는 방법은 무엇입니까?
- firebase : Flutter-필드별로 특정 사용자 만 표시하려면 어떻게해야합니까?
쿼리에 조건을 연결하여 여러 조건과 일치하는 문서를 찾으려고합니다.
그러나 복합 쿼리에 대한 문서는 현재 단일 쿼리에서 여러 arrayContains 조건을 가질 수 없음을 제안합니다.
그러므로 오늘 가지고있는 것은 불가능합니다. 대신 배열 대신 맵 구조를 사용하는 것이 좋습니다 :
다음과 같이 쿼리 할 수 있습니다 :