我试图更新我的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"因为另一个"类别"可能有相同名称的费用。我必须匹配用户名,类别和费用名称,以确保我更新正确的项目。
那我该怎么办?
谢谢!