Javascript 如何访问Firebase实时数据库中子节点的父节点?

Javascript 如何访问Firebase实时数据库中子节点的父节点?,javascript,firebase,firebase-realtime-database,parent-child,Javascript,Firebase,Firebase Realtime Database,Parent Child,在Firebase的实时数据库中,我试图访问父节点的名称,并将其命名为子节点的名称。但是,.parent似乎需要对子节点的引用,如果没有父节点的名称,我似乎无法获得该引用 这是我的数据的代码: <script src="https://www.gstatic.com/firebasejs/5.7.3/firebase.js"></script> <script src="https://apis.google.com/js/platform.js" async de

在Firebase的实时数据库中,我试图访问父节点的名称,并将其命名为子节点的名称。但是,.parent似乎需要对子节点的引用,如果没有父节点的名称,我似乎无法获得该引用

这是我的数据的代码:

<script src="https://www.gstatic.com/firebasejs/5.7.3/firebase.js"></script>
<script src="https://apis.google.com/js/platform.js" async defer></script>

<style>
    tr:hover {background-color: #f5f5f5;}
    th, td {
        border-bottom: 1px solid #ddd;
    }

</style>
<script>

    // Initialize Firebase


tr:hover{背景色:#f5;}
th,td{
边框底部:1px实心#ddd;
}
//初始化Firebase
变量配置={ apiKey:“AIzaSyA85okZdA9v_XAa9BgJJ2EOdUEbL09k0uY”, authDomain:“fir-test-bcb6d.firebaseapp.com”, 数据库URL:“”, projectId:“fir-test-bcb6d”, storageBucket:“fir-test-bcb6d.appspot.com”, messagingSenderId:“976121809263” }; firebase.initializeApp(配置)

//检查您是否已登录
firebase.auth().onAuthStateChanged(函数(用户){
if(user==null){
警报(“未登录”);
返回;
}否则{
userId=user.uid;
name=user.displayName;
imageUrl=user.photoURL;
email=user.email;
var user=firebase.auth().currentUser;
var newuser=user.getAdditionalUserInfo
user.sendEmailVerification().then(函数()){
//已发送电子邮件。
}).catch(函数(错误){
//发生了一个错误。
});
if(firebase.auth().currentUser.emailVerified){
警报(“电子邮件已验证”);
console.log(“电子邮件已验证”);
}
//向用户写入用户数据
//writeUserData(用户名、名称、电子邮件、图像URL);
//移动到tweet功能
//将数据写入文档
mydiv=document.getElementById(“mydata”);
mydiv.innerHTML=名称
myphotodiv=document.getElementById(“myphoto”);
myphotodiv.innerHTML=“”;
firebase.database().ref('/tweets')。一次('value')。然后(函数(快照){
var data=(snapshot.val());
如果(数据==null){
log(“在/tweets/”+userId上找不到数据);
}否则{
firebase.database().ref('/users')。一次('value')。然后(函数(快照){
var userdata=(snapshot.val());
if(userdata!=null){
dataarray=[数据,用户数据]
console.log(数据数组)
更新网页(数据数组);
}
});
//console.log(数据)
//更新网页(数据);
}
});
}//最终用户空检查
}); // 结束检查验证状态
函数encodeImageFileAsURL(){
var fileselected=document.getElementById(“inputFileToLoad”).files;
如果(fileselected.length>0){
var fileToLoad=fileselected[0];
var fileReader=newfilereader();
fileReader.onload=函数(fileLoadedEvent){

var srcData=fileloadevent.target.result;//尽管这个问题已经有一年了,而且可能是一个XY问题,正如评论所说,我相信这可能会回答您的特定问题。我所知道的在您不知道直系父对象时得到子引用的唯一方法是,如果您通过查询检索了子对象的子对象,其中se您可以使用.ref.key从documentSnapshot获取父节点,如下所示:

database().ref("/users/").orderByChild("name").startAt(someText).once('value')
          .then(querySnapshot => {

               querySnapshot.forEach(docSnapshot => {

                   console.log("parent = " + docSnapshot.ref.key);

                   // if this docSnapshot was retrieved because of child "name"'s value
                   // at https://someapp-firebaseio.com/users/uid8234/name
                   // then docSnapshot.ref.key == uid8234

               })
          })


如果您将用户数据存储在/users/中的uid节点下,例如,将“name”作为每个uid节点的子节点之一,则可能会发生这种情况。当然,为了避免检索到该数据,您还可以在“name”旁边的另一个键中存储uid的额外副本尽管这个问题已经有一年了,而且可能是XY问题,正如评论所说,我相信这可能会回答你的具体问题。我所知道的唯一方法是,当你不知道直系父母时,如果你通过查询检索了一个孩子的孩子,那么你就不能得到使用.ref.key从documentSnapshot创建父节点,如下所示:

database().ref("/users/").orderByChild("name").startAt(someText).once('value')
          .then(querySnapshot => {

               querySnapshot.forEach(docSnapshot => {

                   console.log("parent = " + docSnapshot.ref.key);

                   // if this docSnapshot was retrieved because of child "name"'s value
                   // at https://someapp-firebaseio.com/users/uid8234/name
                   // then docSnapshot.ref.key == uid8234

               })
          })


如果您将用户数据存储在/users/中的uid节点下,例如,将“name”作为每个uid节点的子节点之一,则可能会发生这种情况。当然,为了避免检索到该数据,您还可以在“name”旁边的另一个键中存储uid的额外副本而不是引用它。

既然你已经认识孩子的父母,为什么还要引用孩子?这是多余的。首先,如果我不明白你说的话,我很抱歉,因为我是Firebase和后端开发的初学者。让我解释一下——我正在构建一个具有类似功能的社交媒体网站问题是我不知道父项,因为userId只是我的userId(当前用户的)。我想得到发布tweet的人的userId,只知道孩子的名字(在图片中是-Lf_Klhw536655…)。userId是tweetid的父项,上面的数字是(-Lf_Klhw536655…)。谢谢。如果您还不知道某个节点的完整路径,则无法建立对该节点的引用,如果这是您要问的。好的,那么您建议我如何着手解决此问题?您是否可以编辑此问题以更具体地说明您正试图完成的任务?目前,您还没有明确的问题陈述。为什么当你已经认识一个孩子的父母时,你是在建立一个孩子的参考吗?这是多余的。首先,如果我不理解你说的话,我很抱歉,因为我是Firebase和后端开发的初学者。让我解释一下-我正在建立一个社交媒体网站,每个帖子都有一个类似的功能。问题是我不知道父用户,因为userId只是我的(当前用户的)userId。我想得到发布twee的人的userId