.indexOn 如何与用户和唯一键一起使用?

How does .indexOn works with users and unique keys?

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

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

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

但我明白了

Index not defined, add ".indexOn": "distance_traveled", for path "/mileage_maintenance", to the rules

这是我的数据库:

任何我的规则:

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

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

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 属性 定义了一个索引。

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

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

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

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

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

另见:

  • Firebase Query Double Nested