我需要条件代码,以便从Firebase读取数据。我想有条件的就像在SQL“ WHERE project ='test'”中。我用Swift写的。

我有以下代码可用于从Firebase读取数据:

var ref:FIRDatabaseReference?
var databaseHandle:FIRDatabaseHandle?
var tasks = [Task]()
var uid = (FIRAuth.auth()?.currentUser?.uid)! as String

override func viewDidLoad() {
    super.viewDidLoad()

    ref = FIRDatabase.database().reference().child("\(uid)/Tasks")

    startObservetingDB()
}

func startObservetingDB() {
    ref?.observe(.value, with: { (snapshot:FIRDataSnapshot) in
        var newSweets = [Task]()

        for sweet in snapshot.children {
            let sweetObject = Task(snapshot: sweet as! FIRDataSnapshot)
            newSweets.append(sweetObject)
        }

        self.tasks = newSweets
        self.tableView.reloadData()

    }) { (error:Error) -> Void in
        print(error.localizedDescription)
    }
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "TasksCell", for: indexPath) as! TasksCell

    let arrayTasks = tasks[indexPath.row]

    cell.taskName.text = arrayTasks.content

    return cell
}


我有这个Firebase结构:



谁能帮我吗?

最佳答案

您可以通过以下方式获取特定项目的任务:

ref?.queryOrdered(byChild: "project").queryEqual(toValue: "test").observe(.childAdded


但您可能还需要考虑数据结构是否最适合您的使用。您似乎经常(甚至总是?)会显示特定项目的任务。在这种情况下,将数据存储在该结构中会更有效:

ProjectTasks
    $ProjectId (e.g. "test")
        $TaskId ("asd asd se")


顺便说一句:这个答案似乎高度相关:query & where in Firebase (swift 3)

10-08 09:03
查看更多