2016-06-09 91 views
0

我正在尝试使用Firebase查询进行关键字搜索,但他们似乎无法检索到正确的值。它始终是数据库的第一个孩子。数据库是通过使用autoid的子组织的。我的数据是这样的firebase queryendingatValue(“”)总是返回数据库中的第一个孩子

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() 
} 

这是超级沮丧。请帮助

+0

你正在查询的菜名或类别? – Shubhank

+0

关于哪个孩子,您要搜索...类别,菜名或应该在您的Firebase参考中定义的内容 –

+0

我想针对他们中的每个人进行查询。此代码实际上首先比停止返回正确的结果@Shubhank –

回答

1

您正在通过密钥,postref.queryOrderedByKey()订购,然后通过该密钥的值查询queryEndingAtValue(search)

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

取而代之的是您正在搜索的儿童房产。假设您想通过帖子的category进行搜索。

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

这将拉回-KJj6DMQVcaOIBZ76X03的记录。

+0

我想通过 –

+0

查询所有字段您只能查询一个子值。您可以重构数据以允许进一步查询,如posts/clean/$ id。 –

+0

尝试了您的解决方案。没有结果返回 –