-LUeq8x-5QaVSXKJdXtz 是关键
signup = async () => {
const { email, pass, job, description, name, age } = this.state;
// fetching state variables to use in this function
try {
await firebase.auth().createUserWithEmailAndPassword(email, pass);
var playersRef = firebase.database().ref("doctorsList/");
//push function adds the data with a unique key
playersRef.push({
doctor: {
name: name,
age: age,
job: job,
description: description
},
});
}
catch (error) { console.log(error) }
}
如果 Firebase 数据库具有唯一键,我该如何获取数据?
var ref = firebase.database().ref( 'doctorsList/doctor/' );
ref.on('value', (snapshot) => {
alert(snapshot.val().name);
});
当我使用 alert(snapshot.val().name);
时,它会显示数据库中的名称,但是当我尝试通过 this.setState({ name: snapshot.val().name });
它不会保存。或者如何立即保存数据库中的数据?
最佳答案
托尼的回答展示了一旦你知道医生的 key 后如何联系他们。还有多种情况您可能不知道 key 。
例如,如果您对要阅读的医生一无所知,您所能做的就是阅读所有医生的信息:
var ref = firebase.database().ref( 'doctorsList' );
ref.on('value', (snapshot) => {
snapshot.forEach((doctorSnapshot) => {
alert(doctorSnapshot.key+": "+doctorSnapshot.val().doctor.name);
});
});
例如,如果您知道医生的姓名,则可以使用查询来检索与该姓名匹配的医生:
ref.orderByChild("doctor/name").equalTo("shubham").on('value', (snapshot) => {
snapshot.forEach((doctorSnapshot) => {
alert(doctorSnapshot.key);
});
});
这里您仍然需要 snapshot.forEach
,因为可能有多个姓名匹配的医生。
如果您想更改每个医生的某些内容,您可以在回调中更新它:
ref.orderByChild("doctor/name").equalTo("shubham").on('value', (snapshot) => {
snapshot.forEach((doctorSnapshot) => {
doctorSnapshot.ref.child("job").set("doctor");
});
});
关于javascript - 如何使用唯一键在 Firebase 数据库中添加数据,然后使用唯一键获取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53940798/