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

时间:2018-05-08 00:14:51

标签: ios firebase firebase-realtime-database

Firebase noobie原谅任何事情。

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

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

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

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]

1 个答案:

答案 0 :(得分:1)

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

因此,您可以添加# -*- mode: ruby -*- # vi: set ft=ruby : require 'vagrant-aws' Vagrant.configure("2") do |config| config.vm.box = "aws-dummy" config.vm.provider :aws do |aws, override| aws.access_key_id = "my_key_id" aws.secret_access_key = "my_access_key" aws.keypair_name = "my_keypair_name" aws.ami = "ami-916f59f4" override.ssh.username = "ubuntu" override.ssh.private_key_path = "/home/my_user/.ssh/id_rsa" end end ,其中/widgets/[wid]是您唯一的小部件ID。该位置可以完全复制wid中的数据,或者只包含一个引用(需要两个查询)。或任何其他机制,使您能够以您想要的方式查询。