firebase queryendingatValue(“”)始终返回数据库中的第一个子节点

时间:2016-06-09 11:20:56

标签: ios swift firebase firebase-realtime-database

我正在尝试使用firebase查询进行关键字搜索,但它们似乎没有检索到正确的值。它始终是数据库的第一个孩子。数据库由autoid使用child组织。我的数据看起来像这样

posts :
-KJj6DMQVcaOIBZ76X03
      category: 
         "cleaner"
      dishname: 
         "Lysol"
        likes
      8QCQPfShSTdYe1VbCxHK4dkJPFj1: 
         true
      likesCount: 
           1
       picURL: 
      "https://firebasestorage.googleapis.com/v0/b/dis..."
       poster: 
      "8QCQPfShSTdYe1VbCxHK4dkJPFj1"
       price: 
         "$5"
       restaurant: 
         "house"
-KJj6PaHt9EfXQ5-EU-m

-KJnTUcb3BvZDMI0Pxgo

-KJnTl4giuy5QMvdeEo5

正在进行搜索的功能如下所示

func searchBarSearchButtonClicked(searchBar: UISearchBar) {
    filteredPosts.removeAll()
    let postref = firebase.child("posts")
    let  search = searchController.searchBar.text!
    print(search)
    let postQ = (postref.queryOrderedByKey().queryEndingAtValue(search))
    // postQ.keepSynced(true)
    postQ.observeSingleEventOfType(.ChildAdded, withBlock: { (snapshot) in
    self.filteredPosts.append(snapshot)
    print(snapshot)
    self.shouldShowSearchResults = 2
        self.tableView.reloadData()
    })
    searchController.searchBar.resignFirstResponder()
 }

令人非常沮丧。请帮忙

1 个答案:

答案 0 :(得分:1)

您按键排序postref.queryOrderedByKey(),然后按该键的值queryEndingAtValue(search)进行查询。

因此,除非您的search变量属于childByAutoId值之一(-KJnTUcb3BvZDMI0Pxgo),否则我认为您不会得到您想要的内容。

而是根据您要搜索的子资源进行排序。我们假设您想要通过帖子category进行搜索。

var search = "cleaner"
let categoryQuery = postref
   .queryOrderedByChild("category")
   .queryEndingAtValue(search)

这将取消-KJj6DMQVcaOIBZ76X03

的记录