Swift Firebase查找节点,然后在该节点更新多个值

时间:2017-11-03 11:35:34

标签: swift firebase

我试图更新我的Firebase数据,但我似乎无法获得它。

这是我的JSON树:

{
"users" : {
"K1lQ2ALPQRM9SG3pPoZafHCF4Qg1" : {
  "budgets" : {
    "-Ky043hTLPVQ8E7Ji4v3" : {
      "amount" : 55,
      "category" : "sports & dance",
      "expenseName" : "registration fees",
      "finalPayment" : "none",
      "firstPayment" : "none",
      "hasDueDate" : false,
      "order" : 0,
      "ownerName" : "Savannah",
      "repeats" : "never",
      "totalNumberOfPayments" : 1
    },

正如您所看到的,我使用了childByAutoID,所以我必须进行查询才能找到我想要的节点。

所以我使用了这段代码:

ref.child("budgets").queryOrdered(byChild: "ownerName").queryEqual(toValue: currentUserName).observeSingleEvent(of: .childAdded, with: { (snapshot) in
                snapshot.ref.updateChildValues(["expenseName" : self.expenseNameTextField.text!,
                                                "amount" : Int(self.expenseAmountTextField.text!)!])
})

但它只会更改JSON树中的第一个项目,而不是正确的项目。

所以这就是我需要做的:我需要匹配我的JSON树中的三个项目(currentUserName,category和expenseName)。只有当所有这三个项目匹配时,我才能找到一个独特的项目。但是当我尝试查询这三个项目时,我收到一个错误,告诉我每次通话我不能queryEqual(toValue:)次。

这是我尝试的代码,导致错误:

ref.child("budgets").queryEqual(toValue: currentUserName).queryEqual(toValue: expense?.category).queryEqual(toValue: expense?.expenseName).observeSingleEvent(of: .childAdded, with: { (snapshot) in
                snapshot.ref.updateChildValues(["expenseName" : self.expenseNameTextField.text!,
                                               "amount" : Int(self.expenseAmountTextField.text!)!])
})

所以我知道代码不好。

这很复杂的原因是" ownerName"大约有50个这样的项目,其中大约10个可能属于某个"类别",所以我不能只搜索"类别"甚至是" expenseName"因为另一个"类别"可能有相同名称的费用。我必须匹配用户名,类别和费用名称,以确保我更新正确的项目。

那我该怎么办?

谢谢!

0 个答案:

没有答案