【问题标题】:How does .indexOn works with users and unique keys?.indexOn 如何与用户和唯一键一起使用?
【发布时间】:2020-02-14 07:07:49
【问题描述】:

我对 firebase 中的索引规则感到困惑。我有这个数据库,我想在battery_and_cables 中提取distance_traveled。问题是,1 类似于用户自己设置的用户 ID,因此会有所不同。

我在pyrebase中使用了这段代码来提取distance_traveled

db.child("mileage_maintenance").order_by_child("distance_traveled").get()

但我明白了

索引未定义,将路径“/mileage_maintenance”的“.indexOn”:“distance_traveled”添加到规则中

这是我的数据库:

任何我的规则:

{
  "rules": {
    ".read": true,
    ".write": true,
    "mileage_maintenance": {
      "battery_and_cables":{
        ".indexOn": ["distance_traveled"]
       }
    },
  }
}

有没有什么方法可以通过1push键获取distance_traveled

【问题讨论】:

    标签: firebase firebase-realtime-database firebase-security pyrebase


    【解决方案1】:

    Firebase 实时数据库查询在您运行查询的位置下的平面节点列表上运行。因此,在您的情况下,查询会考虑 mileage_maintenance 节点的直接子节点(这只是屏幕截图中的节点 1)。

    您可以在规则中使用通配符,例如您的情况:

    {
      "rules": {
        ".read": true,
        ".write": true,
        "mileage_maintenance": {
          "$id": {
            "battery_and_cables":{
              ".indexOn": ["distance_traveled"]
             }
          }
        }
      }
    }
    

    如您所见,我在此处为1 节点添加了$id 级别。现在这意味着您在每个 /mileage_maintenance/$id/battery_and_cables 节点上为该节点下每个子节点的 distance_traveled 属性定义了一个索引。

    因此,使用此索引,您可以查询特定的 /mileage_maintenance/$id/battery_and_cables 路径以获取 distance_traveled 值。但是您不能仅针对 /mileage_maintenance 对其下的所有 distance_traveled 值运行查询。

    如果您需要这样的查询,您将需要修改/扩充您的数据模型以允许它。例如,通过引入distance_traveled 节点的平面列表,您可以查询:

    "distance_traveled": {
       "1000000": "1/battery_and_cables/-M01CT...1hMj"
    }
    

    或者

    "distance_traveled": {
       "1~battery_and_cables~-M01CT...1hMj": 1000000
    }
    

    最后一个模型中的 ~ 只是该键中的段的单独部分,因为不允许使用 /

    另见:

    【讨论】:

    • 谢谢!我现在对索引的工作原理有了更多的了解。我现在的问题是如何在 pyrebase 中调用它,因为在输入 /mileage_maintenance/$id/battery_and_cables 时会出现 "error" : "Invalid path: Invalid token in path"。还是我理解错了?
    • 这听起来像是您试图在 key 中使用/,这是不允许的。这就是为什么我的最后一个 JSON sn-p 使用 ~ 作为分隔符。
    猜你喜欢
    • 2017-03-19
    • 2017-07-11
    • 2021-02-14
    • 2016-09-29
    • 1970-01-01
    • 2023-01-26
    • 2020-08-03
    • 1970-01-01
    相关资源
    最近更新 更多