不同查询的结构数据

时间:2017-03-17 23:30:00

标签: firebase firebase-realtime-database

我正在学习firebase并试图找到构建数据的最佳方法。

使用简单离开应用程序的示例。员工可以提交和查看他们的叶子。经理可以批准离职。

选项1

"leaves": [
{
  "employee": "pCIUfttSrXQ1dLPDwH7j9GExCkA2",
  "date": "2017-03-01",
  "status": "pendingApproval",
},
{
  "employee": "YSJCAe4wZdYCplA3e0ejMqzQmEF3",
  "date": "2017-01-01",
  "status": "approved"
}]

使用选项1,在两种情况下都需要过滤:

  • 员工列出其休假历史(按“员工”过滤)
  • 当经理列出所有待处理的叶子时(按“状态=待定”过滤)

选项2

"leaves":
{
  "pCIUfttSrXQ1dLPDwH7j9GExCkA2" : [
  {
    "date": "2017-03-01",
    "status": "pendingApproval"
  }
  ],
  "YSJCAe4wZdYCplA3e0ejMqzQmEF3" : [
  {
    "date": "2017-01-01",
    "status": "approved"
  }
  ]
}

使用选项2,当员工列出其休假历史记录时,不需要过滤,但需要过滤(并且我不知道如何)管理员列出待处理的休假。

构建数据的正确方法是什么?如果它是选项2,我们如何过滤所有员工的待定叶片?

1 个答案:

答案 0 :(得分:1)

使用第二个选项;

要让经理筛选待处理的查询,请使用:

FIRDatabase.database().reference().child("leaves").queryOrdered(byChild: "status").queryEqual(toValue: "pending").observeSingleEvent(of: .value, with: {(Snapshot) in


        print(Snapshot.value!)


      // If you have multiple pending request you gotta loop through them        
      // using for loop, access them as separate entity and operate on them

    })