通过Firebase中的动态子键进行过滤

时间:2016-07-10 08:55:46

标签: rest database-design firebase filtering firebase-realtime-database

Firebase docs涵盖按指定子键过滤。但它假设孩子的价值是知道的。它不包括儿童是动态值的情况(例如:学生卷号)

指定的子名称示例数据

{
  "Student1": {
    "semister": {
      "english" : 80,
      "maths" : 60
    }
  },
  "Student2": {
    "semister": {
      "english" : 40,
      "maths" : 45
    }
  }
}

让数学成绩高于50的学生

[GET] https://<baseurl>/students.json?orderBy="semister/maths"&startAt=50

动态子名称示例数据

{
  "Student1": {
    "unit1": {
      "english" : 80,
      "maths" : 60
    },
    "unit2": {
      "english" : 80,
      "maths" : 60
    }
  },
  "Student2": {
    "semister": {
      "english" : 40,
      "maths" : 50
    },
    "unit2": {
      "english" : 80,
      "maths" : 60
    }
  }
}
  

使用下面的

我收到错误

让任何单位的数学得分高于50的学生

[GET] https://<baseurl>/students.json?orderBy="$unit/maths"&startAt=50

感谢任何帮助/建议

1 个答案:

答案 0 :(得分:0)

问题是您没有所有单位的火力点位置。如果您想要更强大的查询,则需要使数据更具关系性。 `

Students: {
   student1: {
      units: {
        unit1:true,
        unit2:true
      }
   },
   student2: {
     units:{
       unit3:true,
       unit4:true
     }
   }
}
Units: {
  unit1: {
    student: student1
    english: 80,
    math: 40,
  },
  unit2: {
    student: student1
    english: 60,
    math: 75,
  }
  unit3: {
    student: student2
    english: 63,
    math: 29,
  }
  unit4: {
    student: student2
    english: 20,
    math: 90,
  }
}

`

此组织允许您执行所需的查询,但更重要的是,其他对象可以引用unit1的相同实例,因此现在您有单位信息的一个事实来源,因此您不会有冲突的数据。