【问题标题】:How to retrieve only the nodes from firebase database?如何仅从 firebase 数据库中检索节点?
【发布时间】:2021-12-28 16:53:20
【问题描述】:

我有一个应用程序,用户可以在其中创建任务供他们全天执行。类似于待办事项列表。我的 firebase 数据库中有一个名为 "Tasks" 的节点,此节点下是添加所有任务的地方。

这是一个视觉示例:

我当然可以将数据添加到 firebase 数据库。这是代码:

taskTitle = titleTextField.text!
taskDescription = notesTextView.text

var tasks: [String: Any] = [:] // declaring empty dictionary

tasks["Description"] = taskDescription
tasks["Due Date"] = date_time

database.child("Tasks").child(taskTitle).setValue(tasks)

所以如果用户创建一个新任务,让我们说他创建 "TASK 4""TASK 5""TASK 6" 它看起来像这样:


这里是杰森数据打印:

    Tasks =     {
        "Task 1" =         {
            Description = Abcderf;
            "Due Date" = "Nov 17, 2021, 19:11";
        };
        "Task 2" =         {
            Description = Abcderf;
            "Due Date" = "Nov 17, 2021, 19:11";
        };
        "Task 3" =         {
            Description = Abcderf;
            "Due Date" = "Nov 17, 2021, 19:11";
        };
        "Task 4" =         {
            Description = Notes;
            "Due Date" = "";
        };
        "Task 5" =         {
            Description = Run;
            "Due Date" = "Nov 24, 2021, 12:11";
        };
        "Task 6" =         {
            Description = Run;
            "Due Date" = "Nov 24, 2021, 12:11";
        };
    };
}

这是打印此快照的代码:

var postRef: DatabaseReference? // declared outside of viewDidLoad()
var refHandle: DatabaseHandle? // declared outside of viewDidLoad()

//set the db ref
postRef = Database.database().reference()

//getting values from db
refHandle = postRef?.observe(DataEventType.value, with: { snapshot in
    self.listOftasks.append("")
})

我只是在self.listoftasks.append("") 设置断点,然后在控制台中我正在执行"po snapshot",然后打印 JSON 对象。


我需要做什么,只读取任务的名称?

【问题讨论】:

    标签: swift firebase firebase-realtime-database


    【解决方案1】:

    首先,如果你只关心任务,你应该只加载Tasks节点而不是加载整个数据库

    tasksRef = Database.database().reference("Tasks")
    

    接下来,您需要在完成处理程序中遍历子节点:

    refHandle = tasksRef?.observe(DataEventType.value, with: { snapshot in
        for taskSnapshot in snapshot.children {
            print(taskSnapshot.key)
        }
    })
    

    为此,我建议您还可以查看looping over child nodes in swift 上的一些以前的问题,例如:


    记住:虽然上面只打印任务的键,它仍然检索每个节点的值。如果您不需要代码中的值,请考虑在数据库中保留一个单独的节点,其中仅包含任务名称(通常为 true 值,因为路径需要存在值)以减少使用的带宽。


    最后,拥有这样的顺序键是 Firebase 中常见的反模式,所以我推荐阅读这篇经典文章:Best Practices: Arrays in Firebase

    【讨论】:

    • 谢谢你,弗兰克。我刚刚跟踪了你的开发者故事,这太棒了。你超级聪明有才华。再次感谢老板。
    • 我让它工作了!
    猜你喜欢
    • 2019-09-29
    • 1970-01-01
    • 2019-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多