是否有任何方法可以可靠地在Firebase Bolt中的嵌套数组(或映射)中指定索引?
在数组上创建索引非常简单:是否有任何方法可以可靠地在Firebase Bolt中的嵌套数组(或映射)中指定索引?,firebase,firebase-realtime-database,firebase-security,Firebase,Firebase Realtime Database,Firebase Security,在数组上创建索引非常简单: type Root { level_1: Level_1[]; } type Level_1 { fieldToBeIndexed: String; } path / is Root {} path /level_1 { index() = ["fieldToBeIndexed"]; } 给出以下内容(删除可读性验证): 但是,由于数组使用了自动生成的键($key1),这意味着如果结构(或实现)中的更改导致键的名称更改,我们无法可靠地引用它下面的任何路径 由于索引
type Root { level_1: Level_1[]; }
type Level_1 { fieldToBeIndexed: String; }
path / is Root {}
path /level_1 { index() = ["fieldToBeIndexed"]; }
给出以下内容(删除可读性验证):
但是,由于数组使用了自动生成的键($key1
),这意味着如果结构(或实现)中的更改导致键的名称更改,我们无法可靠地引用它下面的任何路径
由于索引似乎只能在path
语句中定义,这是否意味着在以下场景中不可能将field索引为index
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?
}
}
}
}
}
您是对的-为了在通配符路径下放置索引,您必须明确命名通配符,以便在path语句中使用它。如果将同一位置的类型和路径组合在一起,则应允许具有单独path语句的属性的类型为Any | Null
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;
}
}
}
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;
}
}
}