【问题标题】:Snapshot of Firebase Realtime DB incomplete/missing several layersFirebase 实时数据库的快照不完整/缺少几层
【发布时间】:2020-05-11 14:41:00
【问题描述】:

我将数据存储在包含多层嵌套的 Firebase 实时数据库中。一层包括一个键值对,其中一个键“练习”对应于一个数组。

当我从 FB 检索此数据作为快照时,该层的值显示为 undefined。快照并未完全展平,但该层和下面的任何内容都丢失了。

这是我检索数据的方式:

loadLanguage({commit}, lang){
    console.log('will try to load: ' + lang)
    DB.ref(`by_language/${lang}`).once('value').then(function(snapshot){
    console.log('snapshot value below is missing several layers')
    var data=snapshot.val()
    console.log(data)
    commit('LOAD_LANGUAGE', {data: data, language: lang})
    });
}       

谁能告诉我为什么快照中的数据与后端存储的数据不同?

【问题讨论】:

    标签: javascript firebase firebase-realtime-database snapshot


    【解决方案1】:

    使用forEach检索数据:

    loadLanguage({commit}, lang){
        console.log('will try to load: ' + lang)
        DB.ref(`by_language/${lang}`).once('value').then(function(snapshot){
        console.log('snapshot value below is missing several layers')
        var data = snapshot.val()
        snapshot.forEach(function(subSnapshot){
        var subData = subSnapshot.val()
        console.log(data)
        commit('LOAD_LANGUAGE', {data: data, language: lang})
         });
        });
    }   
    

    【讨论】:

    • 我尝试了您的建议,但值仍显示为 undefinedsnapshot value below is missing several layers store.js:266 {…} ​ ACT: {…} ​​ "ACT English": undefined
    • lang 是否等于 EN?在它之前你有by_language 节点吗?请尝试添加另一个孩子child("Act English") 并告诉我你得到了什么
    • 是的,在一种情况下它等于'EN',在另一种情况下它是'DE'。两者都导致undefined。我应该在哪里添加孩子?你的意思是DB.ref(by_language/${lang}).child('ACT').child('ACT English')?我试过了,它记录了应该在数据中的数组值practices——显然数据已成功检索。
    • 是的,这正是我的意思,如果你有 ACT 英语和 ACT 德语,那么你可以让它动态而不是静态
    • 您不应该在 firebase 数据库中嵌套数据。这是不好的做法,因为如果这样做,您将遇到当前的问题。您需要更改数据库以便可以轻松查询firebase.google.com/docs/database/ios/…
    猜你喜欢
    • 2022-01-21
    • 2021-01-21
    • 2021-03-26
    • 2021-06-07
    • 1970-01-01
    • 1970-01-01
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多