有什么方法可以在 Firebase Bolt 的嵌套数组(或映射)中可靠地指定索引?

Is there any way to reliably specify an index within a nested Array (or Map) in Firebase Bolt?

在数组上创建索引非常简单:

type Root { level_1: Level_1[]; }
type Level_1 { fieldToBeIndexed: String; }

path / is Root {}
path /level_1 { index() = ["fieldToBeIndexed"]; }

提供以下内容(为了便于阅读,删除了验证):

{
  "rules": {
    "level_1": {
      "$key1": {
        "fieldToBeIndexed": {}
      },
      ".indexOn": ["fieldToBeIndexed"]
    }
  }
}

但是因为自动生成的键 ($key1) 用于数组,这意味着我们不能可靠地引用它下面的任何路径,以防结构(或实现)的变化导致键的名称改变。

因为索引似乎只能在 path 语句中定义,这是否意味着在以下情况下无法索引 fieldToBeIndexed

type Root { level_1: Level_1[]; }
type Level_1 { level_2: Level_2[]; }
type Level_2 { fieldToBeIndexed: String; }

path / is Root {}

转换为:

{
  "rules": {
    "level_1": {
      "$key1": {
        "level_2": {
          "$key2": {
            "fieldToBeIndexed": {}
          }
          // How to get the index here?
        }
      }
    }
  }
}

你是对的 - 为了将索引放在通配符路径下,你必须专门命名通配符,以便你可以在路径语句中使用它。如果您为同一位置组合类型和路径 - 您应该允许 Any | 类型具有单独路径语句的 属性 为空。

type Level1 {
  fieldToBeIndexed: String;
  level_2: Any | Null;
}

type Level2 {
  anotherIndexedField: String;
}

path /level_1 {
  index() = "fieldToBeIndexed";

  /$primary is Level1 {
    /level_2 {
      index() = "anotherIndexedField";

      /$secondary is Level2;
    }
  }
}