我有这样的Firebase实体:
这个功能向我展示了我的所有数据:
func getRecipes(text: String, completion: @escaping (Recipe) -> Void)
{
let databaseRef = FIRDatabase.database().reference()
databaseRef.child("Recipes").queryOrdered(byChild: text).observe(.childAdded, with: { snapshot in
if let value = snapshot.value as? [String : AnyObject] {
let recipe = Recipe(dictionary: value)
completion(recipe)
}
}) { (error) in
print(error.localizedDescription)
}
我只需要显示数据,其名称为“text”(即“Beer”或“Pie”)。
答案 0 :(得分:1)
在queryOrdered(byChild: text)
中,(byChild'代表您要搜索的子节点(属性),在本例中为'title'。然后您要指定要搜索的内容。可以使用queryEqual(toValue: text)
因此databaseRef.child("Recipes").queryOrdered(byChild: text)
将成为databaseRef.child("Recipes").queryOrdered(byChild: "title").queryEqual(toValue: text)
但是,这不适用于您的情况,因为您正在搜索某个子字符串而不是匹配的字符串,这与SQL中的LIKE操作相当。 Firebase目前不允许这样做。唯一可能的相似之处是搜索以某个子字符串开头的字符串。
如果您尝试过滤特定类别,最好添加“类别”节点并搜索特定值。或者,如果您尝试实现搜索功能,则可能必须使用搜索API。我听过很多Elasticsearch但从未使用它,所以你应该做一些研究。