firebase queryendingatValue () всегда возвращает первый дочерний элемент в базе данных

Я пытаюсь выполнить поиск по ключевым словам, используя запросы firebase, но они, похоже, никогда не получают правильное значение. Это всегда первый дочерний элемент базы данных. база данных организована с использованием дочернего по autoid. мои данные выглядят так

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

Это очень расстраивает. пожалуйста помоги


person Will Shappee    schedule 09.06.2016    source источник
comment
вы запрашиваете название блюда или категорию?   -  person Shubhank    schedule 09.06.2016
comment
на каком дочернем элементе вы хотите выполнить поиск... категория, название блюда или то, что должно быть определено в вашей ссылке firebase   -  person EI Captain v2.0    schedule 09.06.2016
comment
Я хочу запросить против каждого из них. Этот код сначала вернул правильные результаты, чем остановил @Shubhank   -  person Will Shappee    schedule 09.06.2016


Ответы (1)


Вы упорядочиваете по ключу, postref.queryOrderedByKey(), а затем выполняете запрос по значению этого ключа queryEndingAtValue(search).

Поэтому, если ваши переменные search не являются одним из значений childByAutoId (-KJnTUcb3BvZDMI0Pxgo), я не думаю, что вы получите то, что хотите.

Вместо этого сортируйте по дочернему свойству, по которому вы ищете. Допустим, вы хотите выполнить поиск по category записи.

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

Это приведет к возврату записи -KJj6DMQVcaOIBZ76X03.

person David East    schedule 09.06.2016
comment
Я хочу запросить все поля, хотя - person Will Shappee; 09.06.2016
comment
Вы можете запрашивать только одно дочернее значение. Вы можете реструктурировать свои данные, чтобы разрешить дальнейшие запросы, такие как posts/cleaner/$id. - person David East; 09.06.2016