[英]Firebase realtime database : orderByChild not working as expected (Even after reading the data using forEach)
[英]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" : {
...
}
}
无法通过一个查询来完成此操作,因为您正在寻找两个单独的值。 您可以获得的最接近的方法是对第二个数据结构( 4Approver1
和Approver2
中的)执行两个单独的查询,然后将结果合并到您的应用程序代码中。
另一种方法是添加一个辅助数据结构,您可以从用户 ID map 返回他们允许批准的任务:
UserTasks: {
"4U1D23dfsdf23e": {
"df234dgkjsf234": true,
"d4S34FSAdsf43FM": true
},
"sdf32fdsf34sdg3": {
"df234dgkjsf234": true
}
}
使用这样的附加结构,您可以轻松找到特定 UID 的任务,然后加载每个任务的详细信息。
有关更多信息,我还建议阅读:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.