如何在两个键之间查询Firebase的值

时间:2018-03-11 13:45:15

标签: javascript firebase firebase-realtime-database

如何使用值搜索firebase数据,如果值介于两个键之间,我想获取数据

示例

如果用户输入1到5之间的任何数字,则返回以下数据,

"start" : "1",
"end" : "5",

"端" key可以为空,我的firebase数据库中的数组位于

之下
"classdata" : [ null, {
      "-L4VflG9efJfNOk0ETjK" : {
        "start" : "1",
        "end" : "2",
        "classdate" : 1517761011016,
        "commentator" : "",
        "description" : "",
        "id" : 1517745488337,
        "title" : "12"
      },
      "-L4WUbRH46l3pIcwDC2z" : {
        "start" : "3",
        "end" : "",
        "classdate" : 1518961333727,
        "commentator" : "",
        "description" : "",
        "id" : 1517759080685,
        "title" : "5"
      },
      "-L4WbgyUB7MRVUzBNJM3" : {
        "start" : "4",
        "end" : "6",
        "classdate" : 1518975293250,
        "commentator" : "",
        "description" : "",
        "id" : 1517761201012,
        "title" : "2"
      },
      "-L5cxhQzDkEHrFi6J5Mf" : {
        "start" : "7",
        "end" : "",
        "classdate" : 1519010573333,
        "commentator" : "",
        "description" : "",
        "id" : 1518958204014,
        "title" : "1"
      },

2 个答案:

答案 0 :(得分:1)

您只能查询一个孩子,以便startend孩子。

你可以做的是:

ref.orderByChild("start").equalTo("4").on(...){...};

上面将给出start = 4时的值

ref.orderByChild("start").limitToFirst(5).on(...){..};

这将为您提供孩子start

的前5个
ref.orderByChild("start").startAt("1").endAt("5").on(..){..};

答案 1 :(得分:0)

正如@Peter Haddad所说" firebase只允许查询一个字段"所以你可以做的就是解决你的问题:

firebase.database().ref('classdata')
  .orderByChild('start')
  .startAt(1)
  .once('value', function (snapshot) {
    snapshot.forEach(function(childSnapshot) {
      var childKey = childSnapshot.key;
      var childData = childSnapshot.val();

      // Here you filter by your second field
      if (childData.end === '' || childData.end <= 5) {
        ...
      }
    });
  })

您可以找到有关如何在firebase中过滤数据的here更多文档。

Here您可以找到一些非常好的方法来解决您的问题。