繁体   English   中英

Firebase查询结果错误

[英]Firebase query results are mistaken

这是我的数据库设计。

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文件上传到此处。

您似乎假设Firebase可以基于包含值的字符串进行过滤,但是不能。 请参阅Firebase查询-查找带有子项的项目,该子项包含字符串 (以及那里的许多链接)。

Firebase 可以做的就是搜索以某个值开头的字符串值。 通过结合使用queryStarting(atValue:)queryEnding(atValue:)

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

如果您使用此查询,并且input为``Baked'',它将仅匹配JSON中的第一个食物。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM