Как получить объекты из firebase по значению ключа

Я новичок в FireBase и у меня есть такая структура моего проекта FireBase

Я хочу получить все объекты, значение «Заинтересованные» равно «мужчинам»

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

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 и профиль будет элементом для этого ключа.

редактировать:

Есть запрос для дочерних значений согласнодокументы.

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

 Jay05 июн. 2016 г., 15:59
Этот ответ не сработает. Snapshot.value - это не строка, это словарь. Кроме того, OP хочет, чтобы все пользовательские узлы, которые Interest = men. Кроме того, если есть 10 000 узлов, это может привести к переполнению памяти устройства. Лучше просто получить интересующие вас узлы с помощью запроса.
 Shubhank05 июн. 2016 г., 16:53
да, я видел, как дети используются на стороне Android, но iOS использует snapshot.value в doc. FrankVanPufflen кажется опытным в Android и поэтому мог бы использовать его таким образом (зная внутренние детали). Я просто отвечаю за их документацию по iOS.
 Jay05 июн. 2016 г., 16:17
Как примечание, читая данные таким образом, они читаются в словарь, который не упорядочен, так что вы потеряете порядок (порядок Firebase, естественно, по Key). Это должно быть повторено с child в snapshot.children
 Shubhank05 июн. 2016 г., 16:23
документы на самом деле не имеют никаких ссылок на использованиеchildren и фактически использует snapshot.value в каждом случае.
 Jay05 июн. 2016 г., 16:50
@FrankVanPufflen Из сотрудников пожарной командыsnapshot.children
 Daniel Chepenko05 июн. 2016 г., 10:32
Хорошо, спасибо! Но на самом деле мне нужно получать ojects, которые удовлетворяют моему условию userInterest == "men". Я пытался написать, если заявление и распечатать (профиль), но я получил ноль
 Shubhank05 июн. 2016 г., 16:04
На самом деле это будет строковый объект, если вы используете обычный.Value восстановить - я проверил это. Хотя ваш ответ объясняет, что запрос является правильным.
 Jay05 июн. 2016 г., 16:11
Я исправлюсь! Код на самом деле работает и потенциально может обеспечить решение. Это не самый лучший процесс, но это, безусловно, полезно знать!

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, вероятно, должен быть profileRef, поскольку это то, что вы на самом деле запрашиваете.

 Kika_Fortez17 авг. 2016 г., 13:43
У меня есть вопрос по этому поводу! Этот код работает, и если я хочу удалить это child.value ["Имя], как мне это сделать?

Ваш ответ на вопрос