繁体   English   中英

Firebase 实时数据库 orderByChild 数据结构 - ReactJS

[英]Firebase Realtime Database orderByChild data structure - ReactJS

我在使用orderByChild查询数据时遇到问题。 我想查询提供的 userID 与任何批准者 ID 匹配的所有任务。 任务 ID 是自动生成的,所以我需要以某种方式展平这个结构。 每个任务有两个审批人,每个审批人有状态,时间戳,id。

关于如何展平它以便我可以利用orderByChild的任何想法?

Tasks:{
  "df234dgkjsf234" : {
   "approvers" : {
      "4U1D23dfsdf23e" : {
        "id" : "4U1DWf95rJvgfAwDYs7m",
        "status" : "pending",
        "timestamp" : "pending"
      },
      "sdf32fdsf34sdg3" : {
        "id" : "FXRkK22TjyxKV6z4UkrU",
        "status" : "pending",
        "timestamp" : "pending"
      }
    },
    "reason" : "test",
    "requester" : "4U1DWf95rJvgfAwDYs7m",
    "requesterName" : "Dana Mayers",
    "status" : "pending",
    "tagetValue" : "QT1IkGHS3mmalyXqdCuD",
    "taskName" : "Title Change",
    "timestamp" : 1644773238,
    "value" : "New Title"
  },
"d4S34FSAdsf43FM" : {
   ...
  }
}

我想理想地进行一个查询来获取此数据,而不是先通过Approver1进行查询,然后再通过Approver2进行查询

Tasks:{
  "df234dgkjsf234" : {
    "Approver1" : "4U1DWf95rJvgfAwDYs7m",
    "Approver1status" : "pending",
    "Approver1timestamp" : "pending"
    "Approver2" : "FXRkK22TjyxKV6z4UkrU",
    "Approver2status" : "pending",
    "Approver2timestamp" : "pending",
    "reason" : "test",
    "requester" : "4U1DWf95rJvgfAwDYs7m",
    "requesterName" : "Dana Mayers",
    "status" : "pending",
    "tagetValue" : "QT1IkGHS3mmalyXqdCuD",
    "taskName" : "Title Change",
    "timestamp" : 1644773238,
    "value" : "New Title"
  },
"d4S34FSAdsf43FM" : {
   ...
  }
}

无法通过一个查询来完成此操作,因为您正在寻找两个单独的值。 您可以获得的最接近的方法是对第二个数据结构( 4Approver1Approver2中的)执行两个单独的查询,然后将结果合并到您的应用程序代码中。

另一种方法是添加一个辅助数据结构,您可以从用户 ID map 返回他们允许批准的任务:

UserTasks: {
  "4U1D23dfsdf23e": {
    "df234dgkjsf234": true,
    "d4S34FSAdsf43FM": true
  },
  "sdf32fdsf34sdg3": {
    "df234dgkjsf234": true
  }
}

使用这样的附加结构,您可以轻松找到特定 UID 的任务,然后加载每个任务的详细信息。

有关更多信息,我还建议阅读:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM