2016-06-05 1 views
1

Я новичок в firebase и у меня есть такая структура моего firebase проектаКак извлекать объекты из firebase по значению ключа

enter image description here

Я хочу, чтобы все объекты, которые «Интересуюсь» значение равно чтобы «люди»

я написал такой код, чтобы получить все объекты, отсортированных по значению Interes:

let thisUserRef = URL_BASE.childByAppendingPath("profile") 

thisUserRef.queryOrderedByChild("Interest") 
    .observeEventType(.Value, withBlock: { snapshot in 

    if let UserInterest = snapshot.value!["Interest"] as? String {  
      print (snapshot.key) 
    } 
} 

Но я получаю ноль.

ответ

2

вам нужно перебрать все ключ-значение профили

 if let allProfiles = snapshot.value as? [String:AnyObject] { 
      for (_,profile) in allProfiles { 
        print(profile); 
        let userInterest = profile["Interest"] 
      } 
     } 

Здесь _ это ключ, который находится в формате KYXA-random string и профиль будет элементом для этого ключа.

Edit:

Там запрашивает для значений детей в соответствии с docs.

Попробуйте thisUserRef.queryOrderedByChild("Interest").equalTo("men") и затем, используя внутренний цикл, который я, указанный в ответе

+0

Хорошо, thx! Но на самом деле мне нужно получить объекты, которые удовлетворяют моему условию userInterest == «men». Я попытался написать if statement и print (profile), но я получил nil –

+1

Этот ответ не сработает. Snapshot.value не является строкой, это словарь. Кроме того, OP хочет, чтобы все пользовательские узлы имели значение Interest = men. Кроме того, если есть 10 000 узлов, это может привести к перегрузке памяти устройства. Лучше просто получить интересующие узлы через запрос. – Jay

+0

На самом деле это будет строковый объект, если вы используете обычное '.Value' retrieve - я его протестировал. Хотя ваш ответ объясняет правильность запросов. – Shubhank

1

Это основной запрос в Firebase. (Обновление для Swift 3 Firebase 4)

let profileRef = self.ref.child("profile") 
    profileRef.queryOrdered(byChild: "Interest").queryEqual(toValue: "men") 
    profileRef.observeSingleEvent(of: .value, with: { snapshot in 

     for child in snapshot.children { 
      let dict = child as! [String: Any] 
      let name = dict["Name"] as! String 
      print(name) 
     } 
    }) 

Наследство документация от Firebase действительно описывает, как работать с запросами: найти его здесь

Legacy Firebase Queries

Новая документация довольно тонкая.

О, просто чтобы указать переменную; thisUserNode должен, вероятно, быть профилем, так как это то, что вы на самом деле выполняете.

+1

У меня есть вопрос об этом! Этот код работает, и если я хочу удалить этот child.value ["Name], как это сделать? –

Смежные вопросы