如何在Javascript中从查询Firebase获取密钥
如何获取如何在Javascript中从查询Firebase获取密钥,javascript,angular,firebase,firebase-realtime-database,Javascript,Angular,Firebase,Firebase Realtime Database,如何获取UID等于的密钥:firebase.auth().currentUser.UID,因为我可以在用户输入新数据时更新此信息 如何更新信息?我使用orderByChild和equal和set,但不起作用 我的代码: updateUserInformation() { var ref = firebase.database().ref('/users/'); ref.on('value', (snapshot) => { snapshot.forEach((child)
UID
等于的密钥:firebase.auth().currentUser.UID
,因为我可以在用户输入新数据时更新此信息
如何更新信息?我使用orderByChild
和equal和set,但不起作用
我的代码:
updateUserInformation() {
var ref = firebase.database().ref('/users/');
ref.on('value', (snapshot) => {
snapshot.forEach((child) => {
if (child.val().UID == firebase.auth().currentUser.uid) {
this.profileData = [{
name: child.val().name,
lastname: child.val().lastname,
phone: child.val().phone,
direction: child.val().direction,
followQuantity: child.val().followQuantity,
points: child.val().points,
sex: child.val().sex,
}];
this.cdRef.detectChanges();
}
});
})
}
假设您的实时数据库中有唯一的
UID
字段,您可以这样做:
updateUserInformation() {
const uid = firebase.auth().currentUser.uid;
var ref = firebase.database().ref('/users/').orderByChild('UID').equalTo(uid);
ref.once('value', (snapshot) => {
const updates = {};
snapshot.forEach((child) => {
const userKey = child.key;
const userObject = child.val();
updates[`${userKey}/fieldWhichYouWantToUpdate`] = `Field Value you want it to set to`;
firebase.database().ref('/users/').update(updates);
});
})
}
我还没有对此进行测试,但我认为这应该可行。下面是Firestore和ES6承诺的一个示例。如果考虑切换到FixSt店,查询将是这样的:
updateUserData = (user) => {
return new Promise((resolve, reject) => {
firebaseService.firestore()
.collection('users')
.doc(user.id)
.update({
name: user.name,
lastname: user.lastname,
...
})
.then(() => {
resolve();
})
.catch(function (error) {
reject(error);
});
});
}
@SiddAjmera的答案是正确的。它还显示了当前数据模型的一个缺点:可能有多个节点具有正确的UID。虽然您的应用程序可能不允许这样做,但您的数据模型允许这样做,并且您不能通过安全规则强制UID的唯一值
每当存储具有自然标识符的项时,考虑使用那些自然ID作为关键字存储这些项。在用户的情况下,这意味着您应该强烈考虑将用户存储在UID中。
users: {
"BD21...Wv33": {
"email": "test2@test.com",
...
}
}
这一结构:
- 可以保证每个用户的UID只能出现一次,因为根据定义,键在父节点中是唯一的
- 您只需通过用户的UID查找用户,方法如下:
var ref = firebase.database().ref('/users/').child(uid); ref.once('value', (snapshot) => { console.log(snapshot.key); snapshot.ref.child("fieldWhichYouWantToUpdate"].set("Field Value you want it to set to"); })