【问题标题】:How to query firebase keys with a substring如何使用子字符串查询 Firebase 键
【发布时间】:2018-02-21 01:33:51
【问题描述】:

我想查询包含输入的 Firebase。例如在下面的数据库结构中,我想查询所有包含“4140”的节点 所以我使用这个代码

  var catref = Cataloguedatabase.ref("/Listing Search/");


    return catref.once('value').then(function(snapshot){
    snapshot.forEach(childSnapshot => { 

    let snapdb = childSnapshot.val();
    let key = childSnapshot.key;
    //use ES6 includes function
    if(key.includes(schname)){  

    console.log(childSnapshot.val());
    var searchresults = childSnapshot.val();
    var container = document.getElementById('listing_gallery');
                      // container.innerHTML = '';

    var productCard = `
        <div class="col-sm-3">
        <div class="card" onclick="gotoproduct(this);" id="${key}">
                              `
         container.innerHTML += productCard;
                    }
                })
              })

这可行,但问题是它首先查询所有子节点并通过数组排序。这对于具有少量子节点的节点是可以的,但是当它涉及到数千个子节点时,它变得不切实际。有没有我只能查询包含 firebase 中的值的键,如果没有,我还能如何实现?

【问题讨论】:

    标签: javascript firebase firebase-realtime-database


    【解决方案1】:

    正如Doug 所说,没有办法查询包含某个字符串的值。但是您可以查询某个子字符串开头的键:

    return catref.orderByKey().startAt("4140-").endAt("4140-\uf8ff").once('value').then(function(snapshot){
    

    这只会匹配键以4140-开头的子节点。

    【讨论】:

    【解决方案2】:

    Firebase 实时数据库无法满足您的要求。没有子字符串查询。

    如果您只对查询的前四个字符感兴趣,您可以将该字符串作为子节点存储在该节点内,然后在该子节点上使用 orderByChild() 以仅查找以某个特定字符开头的项目四个字符序列。

    您可以在documentation 中阅读有关订购的更多信息。

    【讨论】:

    • 除了firebase还有其他方法可以实现吗?
    猜你喜欢
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多