Firestore Поиск значений в нескольких массивах - PullRequest
0 голосов
/ 02 января 2019

У меня есть два массива в каждом из моих документов Firestore.В моем приложении вы можете искать на основе значений в этих массивах.Я могу заставить свой поиск работать, если я ищу точные совпадения между созданными массивами, основываясь на выбранных параметрах, и ищу точные совпадения в моих документах следующим образом.

let _ = circleQuery.observe(.documentEntered, with: { (key, location) in
            if let key = key {
                Constants.firestore.collection("facilities").whereField("facility_type", isEqualTo: self.type!)
                    .whereField("insurance_accepted", isEqualTo: self.insurance!).getDocuments { (querySnapshot, error) in
                        if let err = error {
                            print(err.localizedDescription)
                        } else {
                            for document in (querySnapshot?.documents)! {
                                if document.documentID == key {
                                    self.facilities?.append(document.data())
                                    self.addFaciltiesToMap()
                                }
                            }
                        }
                }
            }
        })

Проблема с этимэто то, что это не смотрит на отдельные ценности.Я хочу отобразить результаты в зависимости от того, содержится ли значение из моего локального массива в двух массивах документов.У пользователя есть опции, которые можно выбрать из каждого из этих массивов, и им не нужно выбирать из обоих, поэтому они могут выбирать опции, которые содержатся только в одном или другом.Например, они могут выбрать от 0 до 4 опций из массива «ility_type »и от 0 до 2 опций из массива« insurance_accepted ».Таким образом, если они выбирают только параметры из «Facility_type», я хочу искать только выбранные значения в этом массиве документов, и то же самое касается массива документов «insurance_accepted».Если они выбирают варианты из обоих, мне нужно искать варианты в обоих.Если они выбирают только один или другой, мне нужно возвращать результаты, основываясь на том, существуют ли их выбранные значения в этом одном массиве в документе.Если они выбирают оба, мне нужно возвращать результаты, основываясь на том, сделано ли хотя бы одно совпадение в каждом массиве документов.

Это в основном то, чего я пытаюсь достичь.

for value in self.type! {
                    Constants.firestore.collection("facilities").whereField("facility_type", arrayContains: value).getDocuments { (querySnapshot, error) in
                        if let err = error {
                            print(err.localizedDescription)
                        } else {
                            for document in (querySnapshot?.documents)! {
                                if document.documentID == key {
                                    self.facilities?.append(document.data())
                                }
                            }
                        }
                    }
                }

                for value in self.insurance! {
                    Constants.firestore.collection("facilities").whereField("insurance_accepted", arrayContains: value).getDocuments { (querySnapshot, error) in
                        if let err = error {
                            print(err.localizedDescription)
                        } else {
                            for document in (querySnapshot?.documents)! {
                                if document.documentID == key {
                                    self.facilities?.append(document.data())
                                }
                            }
                        }
                    }
                }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...