Javascript 返回一个孩子';使用orderByChild和equalTo在Firebase查询中的s值

Javascript 返回一个孩子';使用orderByChild和equalTo在Firebase查询中的s值,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,我正在尝试为存储中当前登录到firebase实时数据库的图像提取URL 这是一个快照游戏-屏幕上将有两张卡(左图和右图),当两张卡匹配时,用户将单击快照 我的所有图像URL都以以下方式存储: 每一个都有一个称为“索引”的唯一子级,我还有另一个树,它只是每个图像记录的运行计数。因此,目前我正在运行一个函数,它检查当前计数的总数,然后执行一个随机函数来生成一个随机数,然后使用orderByChild和一个包含随机索引数的equalTo对images树执行数据库查询 如果我记录这个数据快照,我可以看

我正在尝试为存储中当前登录到firebase实时数据库的图像提取URL

这是一个快照游戏-屏幕上将有两张卡(左图和右图),当两张卡匹配时,用户将单击快照

我的所有图像URL都以以下方式存储:

每一个都有一个称为“索引”的唯一子级,我还有另一个树,它只是每个图像记录的运行计数。因此,目前我正在运行一个函数,它检查当前计数的总数,然后执行一个随机函数来生成一个随机数,然后使用orderByChild和一个包含随机索引数的equalTo对images树执行数据库查询

如果我记录这个数据快照,我可以看到一个记录的完整节点(索引、分数、url、用户及其值),但是如果我尝试只拉url,我会得到一个Null值。令人恼火的是,我似乎可以在空闲时返回术语“URL”,但我无法获得其潜在价值。我想知道这是否是因为它是一个字符串而不是一个数字,但我找不到任何东西表明这是一个问题

请记住,我在max只学了大约一周Javascript,所以如果我犯了明显的新手错误,这可能就是原因

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

    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()上循环来满足该列表:


对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; 
       })
    })