Как мой вопрос. Я не могу получить данные из firebase, когда пытаюсь использовать queryEqualToValue с ключом auto id.

self.ref.child(..my child..).queryOrderByChild("name").queryEqualToValue("my name")

Автоматический идентификатор ребенка над «именем» ребенка.

Изменить: для моего дерева json

  • Студенты
    • (автоматический идентификатор)
      • имя
        • имя
        • ник

Моим настоящим данным это не нравится, но это, например, структура. Очень хочу проверить равно "имя".

Вот мой код

let ref = FIRDatabase.database().reference()
ref.child("Students").queryOrderedByChild("name").queryEqualToValue("Jason bourne").observeEventType(.Value, withBlock: { snapshot in 
   print("value : " + snapshot.value)
}
4
Oniikal3 6 Сен 2016 в 17:44

3 ответа

Лучший ответ

Учитывая, что ваша база данных в реальном времени выглядит примерно так:

{
    "students": {
        1: {
            "name": {
                "first_name": "Nathapong",
                "nick_name": "Oniikal3"
            }
        }
    }
}

Вы можете наблюдать путь учеников с типом события ChildAdded и упорядочивать запрос по дочернему ключу name/first_name. Затем вы можете использовать queryEqualToValue, чтобы найти студентов с определенным именем.

let ref = FIRDatabase.database().referenceWithPath('students').queryOrderByChild("name/first_name").queryEqualToValue("Nathapong")

ref.observeSingleEventOfType(.ChildAdded, block: { snapshot in
    print(snapshot)
})
6
Callam 6 Сен 2016 в 16:37

Перед использованием запросов с дочерними элементами вам необходимо указать это с помощью ".indexOn":["name"] в правилах базы данных. Примеры см. В документации.

{
    "rules":{
        ".write": "true",
        ".read": "true",
        "Students": {
            "$key": {
                ".indexOn":["name"]
            }
        }
    }
}

Ваши правила чтения / записи могут быть там, где вам нужно. .indexOn похоже на другое правило, наряду с .validate

0
Dima Rostopira 6 Сен 2016 в 16:04

Этот код должен работать. Проверьте имена, если я допустил ошибки, и введите свои данные.

self.ref.child("Students").child("name").queryOrderedByChild("first name").queryEqualToValue("my name").observeSingleEventOfType(.Value) { (snapshot: FIRDataSnapshot) in
    print(snapshot.value)
}
1
ZassX 6 Сен 2016 в 16:09