如何在路径内部获取带有通配符的 Firebase 对象的值?



Firebase菜鸟,所以请原谅。

应用具有containerswidgets的层次结构。每个 ID 对于其类型都是唯一的(即widgetID都是唯一的)。

路径如下所示:containers/<id>/widgets/<id>

要访问容器containerID的单个小部件widgetID,我使用:

NSString *ref = [NSString stringWithFormat:@"containers/%@/widget/%@", containerID, widgetID];
FIRDatabaseReference *containers = [fb child:ref]
[[fb child:ref] observeSingleEventOfType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) ...

要访问容器containerID的所有小部件,我使用:

NSString *ref = [NSString stringWithFormat:@"containers/%@/widgets", containerID];
[[fb child:ref] observeSingleEventOfType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) ...

应用程序的其他部分可以移动小部件。如何访问我知道其 ID 被移动的特定小部件?我想做的是:

NSString *ref = @"containers/*/widget/123";
[[fb child:ref] observeSingleEventOfType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) ...

显然这是行不通的。唯一的解决方案是请求每个容器和每个小部件,然后在所有匹配项时在最深的块中触发某些内容?[注:有很多containers]

您可能希望执行相当于创建所有小部件的另一个索引的操作,以便可以通过其唯一 id 查询它们。 是的,这是数据重复,是的,这在NoSQL类型的数据库中很常见。 数据的结构应适合要对其执行的查询类型。

因此,您可以添加/widgets/[wid]其中wid是您唯一的小部件 ID。 该位置可以完全复制/container/[cid]/widgets/[wid]中的数据,或者只包含那里的引用(需要两个查询)。 或任何其他机制,使您能够以所需的方式进行查询。

最新更新