0

-LUeq8x-5QaVSXKJdXtz 是关键 -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 });它不会保存。或者我怎样才能一次从数据库中保存数据?

4

2 回答 2

2

托尼的回答显示了一旦您知道了医生的钥匙,如何找到医生。还有各种情况下您可能不知道密钥。

例如,如果您对要阅读的医生一无所知,您所能做的就是阅读所有医生的信息:

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");
  });
});
于 2018-12-27T06:57:16.757 回答
1

如果要使用特定密钥上传,请将 ref 更改为:

const key = //your key here;
var playersRef = firebase.database().ref(`doctorsList/${key}`);

然后,如果您想使用特定键获取数据,请更改为:

var ref = firebase.database().ref( `doctorsList/${key}`);

  ref.on('value', (snapshot) => {
    alert(snapshot.val().name);
 });
于 2018-12-27T06:51:17.200 回答