Результаты запроса Firebase ошибочны - PullRequest
0 голосов
/ 10 ноября 2018

Это мой дизайн базы данных.

foodie-ab2b4{
 Foods{
   0{
    FoodName: "Baked Beans In Tomato Sauce"
    FoodRecipe: 
    FoodUri: 
    Image: 
    }
   1{
    FoodName: "Another bean | Bubbling Bacon Butter Beans recipes"
    FoodRecipe: 
    FoodUri: 
    Image: 
    }
   }
  }

Я работаю над проектом ios, и именно так структурировал мой firebase json.

let ref = Database.database().reference()
func searchFoodByName(FoodName: String){
    let foodsRef = ref.child("Foods")

    let input = FoodName
    let query = foodsRef.child(key).queryOrdered(byChild: "FoodName").queryEnding(atValue: input)
    query.observeSingleEvent(of: .value, with: { snapshot in
        print(snapshot)
        for child in snapshot.children {
            let snap = child as! DataSnapshot
            let dict = snap.value as! [String: Any]
            let fName = dict["FoodName"] as! String
            let fIngredients = dict["Ingredients"] as! [String]
            print(fName)
            print(fIngredients)

            let key = snapshot.key
            print(key)
        }
    })    
}

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

Когда я запрашиваю слово "помидор", мне нужно получить 1 объект. Но есть два. Хотя в моем втором объекте нет томатного слова.

Два объекта находятся в моем файле JSON.

Если необходимо, я могу загрузить весь свой файл JSON сюда.

1 Ответ

0 голосов
/ 10 ноября 2018

Вы, похоже, предполагаете, что Firebase может фильтровать на основе строк, которые содержат значение, но не могут. См. Запрос Firebase - Найти элемент с дочерним элементом, содержащий строку (и множество ссылок оттуда).

Что может сделать Firebase - это поиск строковых значений, которые начинаются с определенного значения. Вы делаете это с помощью комбинации queryStarting(atValue:) и queryEnding(atValue:):

let query = foodsRef
  .queryOrdered(byChild: "FoodName")
  .queryStarting(atValue: input)
  .queryEnding(atValue: input+"\\uf8ff")

Если вы используете этот запрос, а input - `` Запеченный`, он будет соответствовать только первой еде из вашего JSON.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...