Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何查询Firebase中两个键之间的值_Javascript_Firebase_Firebase Realtime Database - Fatal编程技术网

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

Javascript 如何查询Firebase中两个键之间的值,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,如何使用值搜索firebase数据,如果值位于两个键之间,我想获取数据 范例 如果用户输入1到5之间的任何数字,则返回以下数据 "start" : "1", "end" : "5", 结束键可以为空,firebase数据库中的数组如下 "classdata" : [ null, { "-L4VflG9efJfNOk0ETjK" : { "start" : "1", "end" : "2", "classdate" : 15177610

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

范例

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

"start" : "1",
"end" : "5",
结束键可以为空,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"
      },

正如@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中过滤数据的更多文档


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

您只能查询一个子项,因此可以选择开始或结束子项

你能做的是:

ref.orderByChild("start").equalTo("4").on(...){...};
当start=4时,以上将为您提供值

ref.orderByChild("start").limitToFirst(5).on(...){..};
这将为您提供儿童启动的前5个步骤


您的代码尚未按任何顺序对子节点排序,这意味着startAt和endAt子句按优先级进行过滤。提供此复合查询功能,例如wherestart,>,1.whereend,如果答案对您有帮助,请将其投票并标记为正确,以便其他人知道它有帮助,谢谢@拉希德克
ref.orderByChild("start").startAt("1").endAt("5").on(..){..};