如何在作为数组的子节点上使用equalTo()查询函数

时间:2017-08-07 11:54:05

标签: json firebase firebase-realtime-database

我有一个Json Tree for Teachers数据库

{  "Teachers":
        {
          "Teacher_id" : {
            "email" : "teacher1@something.com",
            "name" : "teacher1",
            "Subjects" : {0 : "Maths",
                         1 : "science"
                         },
            "Subject_Exp-in-years" :{ 0:"Maths_2",
                                      1:"Science_4"
                                    }
            },
           "Teacher_id" : {
            "email" : "teacher2@something.com",
            "name" : "teacher2",
            "Subjects" : {0 : "Geography",
                          1 : "science"
                         },
            "Subject_Exp-in-years" :{ "Geography_5",
                                      "Science_1"
                                    }
          }
}

我如何获得教授科学的教师

我使用了查询

var db_ref=firebase.database().ref();
    db_ref.child("Teachers").orderByChild("Subjects").equalTo("Science")

如何通过查询函数来检查数据库中的数组中是否存在值?

2 个答案:

答案 0 :(得分:0)

使用.orderByChild("Subjects").equalTo("Science")时,由于Subjects个节点子节点都不等于Science,因此无法正常工作。所以为了解决这个问题,我重新命令你改变一下这样的数据库结构:

{  "Teachers":
    {
      "Teacher_id" : {
        "email" : "teacher1@something.com",
        "name" : "teacher1",
        "Subjects" : {Maths: true,
             science: true
             },

正如您所见,我已将Subjects的孩子改为:Maths: truescience: true。要检查节点下是否存在值,只需在该节点上使用exists()函数。

希望它有所帮助。

答案 1 :(得分:0)

您可以使用for循环来读取数组中的每个元素。

当你逐个阅读它们时,你可以包含if else语句来检查你想要的值是否存在。我们假设值为JOHN

var index;
var arraylist = ["a", "b", "c"];
for (index = 0; index < arraylist.length; ++index) {
    if(arraylist[index] = "JOHN") {
        console.log(arraylist[index] + "is in the array");
    };
}