Как получить конкретное значение в firebase-realtime-database в swift 4.0 - PullRequest
0 голосов
/ 19 сентября 2018

У меня возникают проблемы при попытке получить конкретное значение в firebase-realtime-database в swift 4.0

Вот значение, которое я хочу получить и которое хранится в переменной

let value = 12345678

Вот как выглядит моя база данных firebase

enter image description here

И я хочу найти trackId, который имеет то же значение, что и моя переменная, а затем получить этот trackId

Я потратил целую неделю на эту проблему, и, похоже, я не могу ее решить. Любая помощь будет очень признательна.

Здесь мой код пока что

let questionPostsRef = self.ref.child("questionPosts")
let query = questionPostsRef.queryOrdered(byChild: "trackId").queryEqual(toValue: "12345678")
query.observeSingleEvent(of: .value, with: { snapshot in
    for child in snapshot.children {
        let childSnap = child as! DataSnapshot
        let dict = childSnap.value as! [String: Any]
        let cat = dict["category"] as! String
        let name = dict["name"] as! String
        print(childSnap.key, cat, name)
    }
})

1 Ответ

0 голосов
/ 20 сентября 2018

Это стандартный запрос Firebase.

Чтобы извлечь узлы, содержащие дочерний элемент с определенным значением, мы запрашиваем узлы для соответствующего ключа узла и указываем искомое значение.Они будут возвращены в виде моментального снимка, и их может быть больше одного, поэтому нам нужно перебрать каждый из возвращенных моментальных снимков.

let questionPostsRef = self.ref.child("questionPosts")
let query = questionPostsRef.queryOrdered(byChild: "trackId").queryEqual(toValue: "12345678")
query.observeSingleEvent(of: .value, with: { snapshot in
    for child in snapshot.children {
        let childSnap = child as! DataSnapshot
        let dict = childSnap.value as! [String: Any]
        let cat = dict["category"] as! String
        let name = dict["name"] as! String
        print(childSnap.key, cat, name)
    }
})

, и результат будет (предположим, два были найдены)

-Lu9ma9jsd...  some category   some name
-K999a90k9...  some category   some name

Это описано в руководстве по Firebase: Работа со списками данных в разделе Сортировка и фильтрация

Теперь вопросы состояния

И я хочу найти trackId, который имеет то же значение, что и моя переменная, а затем получить этот trackId

Конечно, если вы уже знаете trackId, вам не нужно его извлекать, так как он у вас уже есть.,Я предполагаю, что вы хотите вернуть узлы, которые соответствуют этому идентификатору дорожки, чтобы вы могли получить доступ к другим данным, что и делает приведенный выше код.Если вы спрашиваете что-то другое, дайте мне знать.

РЕДАКТИРОВАТЬ: продолжение ОП.Для настройки Firebase это типичный шаблон проектирования в контроллере представления.Оттуда вы можете ссылаться на свою Firebase в этом классе с помощью self.ref (как в моем ответе выше)

import UIKit
import Firebase
import FirebaseAuth
import FirebaseDatabase
import FirebaseStorage

class ViewController: UIViewController {
    var ref: DatabaseReference!

    override func viewDidLoad() {
        super.viewDidLoad()
        self.ref = Database.database().reference()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...