簡體   English   中英

使用orderByChild和equalTo在Firebase查詢上返回單個孩子的值

[英]Returning a single child's value on Firebase query using orderByChild and equalTo

我正在嘗試為Firebase實時數據庫中當前記錄的存儲中的圖像提取URL。

這是用於捕捉游戲的-屏幕上將有兩張卡片(左圖和右圖),當兩張牌匹配時,用戶將單擊捕捉。

我所有的圖像網址都以以下方式存儲:

數據庫架構

每個人都有一個唯一的稱為“索引”的孩子-我還有另一棵樹,它只是每個圖像記錄的運行計數。 因此,當前我正在運行一個函數,該函數檢查當前計數的總數,然后執行隨機函數以生成隨機數,然后使用orderByChild和包含隨機索引號的equalTo對圖像樹執行數據庫查詢。

如果我記錄它的數據快照,那么我可以看到一條記錄的完整節點(因此,索引,分數,URL,用戶及其值),但是如果我嘗試僅提取URL,則會返回Null值。 看起來很煩,我可以很隨意地返回“ URL”一詞,但我無法獲得潛在的價值。 我想知道這是否是因為它是一個字符串而不是一個數字,但是我找不到任何暗示這一問題的信息。

請記住,我最多只學習Java語言大約一個星期,因此,如果我犯了明顯的菜鳥錯誤,這可能就是原因!

下面是一個代碼片段,向您展示我的意思:

    var indRef = firebase.database().ref('index')
    var imgRef = firebase.database().ref('images')
    var leftImg = document.getElementById('leftImg')
    var rightImg = document.getElementById('rightImg')

    document.addEventListener('DOMContentLoaded', function(){

    indRef.once('value')
    .then(function(snapShot){

        var indMax = snapShot.val()
        return indMax;
    })
    .then(function(indMax){


        var leftInd = Math.floor(Math.random()* indMax + 1)
        imgRef.orderByChild('index').equalTo(leftInd).once('value', function(imageSnap){
            var image = imageSnap.child('url').val();
            leftImg.src=image; 
            })
        })
    })

當您對Firebase數據庫執行查詢時,可能會有多個結果。 因此,快照包含這些結果的列表。 即使只有一個結果,快照也將包含一個結果的列表。

您的代碼需要通過遍歷Snapshot.forEach()來滿足該列表的需要:

   imgRef.orderByChild('index').equalTo(leftInd).once('value', function(imageSnap){
       imageSnap.forEach(function(child) {
         var image = child.child('url').val();
         leftImg.src=image; 
       })
    })

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM