【问题标题】:Firebase Realtime Database orderByChild data structure - ReactJSFirebase 实时数据库 orderByChild 数据结构 - ReactJS
【发布时间】:2022-02-15 06:43:52
【问题描述】:

我在使用 orderByChild 查询数据时遇到问题。我想查询提供的用户 ID 与任何批准者 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" : {
   ...
  }
}

【问题讨论】:

    标签: reactjs firebase firebase-realtime-database


    【解决方案1】:

    没有办法用一个查询来做到这一点,因为您正在寻找两个单独的值。最接近的方法是对第二个数据结构(4Approver1Approver2 in)执行两个单独的查询,然后将结果合并到您的应用程序代码中。

    另一种方法是添加辅助数据结构,您可以在其中将用户 ID 映射回允许他们批准的任务:

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

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

    有关这方面的更多信息,我建议您还阅读:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-13
      • 2018-05-28
      • 1970-01-01
      • 2021-06-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多