如何更新现有员工的eImageUrl?我正在尝试访问的节点如下所示:
Employees
KTpWLCrQTTSfQnTCn5w
eId : "1000"
deptId : "10"
eImageUrl ""
KTqWLCrVVTMfQsTCw6n
eId : "1001"
deptId : "10"
eImageUrl ""
使用KTpWLCrQTTSfQnTCn5w
自动生成每位员工的childByAutoId()
等值。
我想要更新的员工eId
。我尝试了以下内容:
databaseRef.child("Employees").child("10001").setValue(["eImageUrl": eImageUrl])
但是在Employees下创建了另一个节点:
Employees
KTpAQCrYIBSfQxTCn2w
eImageUrl "https://firebasestorage.googleapis.com/c0/myapp.com/a/employee.jpg"
答案 0 :(得分:3)
Firebase的推送ID非常适用于没有自然键的项目集合或需要按时间顺序存储的项目。但是当项目确实有自然键时,通常最好将它们存储在该键下。
所以在这种情况下,我会考虑将员工存放在他们的员工ID下。
Employees
"eId_1000"
deptId : "10"
eImageUrl ""
"eId_1001"
deptId : "10"
eImageUrl ""
我已为员工ID指定了字母数字前缀,以确保Firebase客户端不会尝试将其解释为数组。
使用此结构后,您可以使用updateChildValues()
修改员工记录:
databaseRef.child("Employees").child("eId_10001").updateChildValues(["eImageUrl": eImageUrl])
或者在树中低一级调用setValue()
:
databaseRef.child("Employees/eId_10001/eImageUrl").setValue(eImageUrl)
<强>更新强>
由于您表示希望坚持使用当前的数据结构,因此该查询将适用于此:
let employees = databaseRef.child("Employees")
let query = employees.queryOrdered(byChild: "eId").queryEqual(toValue: "1000")
query.observe(.childAdded, with: { (snapshot) in
snapshot.ref.updateChildValues(["eImageUrl": eImageUrl])
})
答案 1 :(得分:1)
您需要首先获取pushid才能执行数据库更新
#include <iostream>
using namespace std;
int main()
{
int i=10, j=5;
int modResult;
int divResult;
modResult = i%j;
cout << modResult;
divResult = i/modResult;
cout << divResult;
return 0;
}
希望这有帮助