从Firebase检索密钥的特定值列表

时间:2018-01-03 10:31:25

标签: ios swift firebase firebase-realtime-database

我有以下firebase结构:

2014 {
 0 {
  CityState: "New York, NY",
  PinCode: "12345"
 },
 1 {
  CityState: "Los Angeles, CA",
  PinCode: "67890"
 }
}

我必须从firebase数据库获取所有CityState字段的列表。 但我总是得到完整的数据,然后必须过滤下面的数据:

ref?.child("2014").observeSingleEvent(of: .value, with: { snapshot in
            if let item = snapshot.value as? [Dictionary<String, Any>] {
                for items in item {
                    print(items["CityState"])
                }
            } else {
                print (snapshot.value)
            }
        })

由于需要检索大量数据,因此需要很长时间。是否有firebase查询,我可以获取“CityState”键的值列表?

我使用的是swift 3.2和Xcode 9.2

1 个答案:

答案 0 :(得分:2)

Firebase始终从数据库返回完整节点。没有API来获取每个节点的子集。

使用Firebase数据库(以及大多数其他NoSQL数据库)时,建议为应用程序的用例建模数据。因此,如果您需要在应用中显示城市状态列表,则应该在数据库中存储城市状态列表:

CityStates: {
 0: "New York, NY",
 1: "Los Angeles, CA"
}

如果您只想显示特定年份的城市状态,那么按年份存储它们可能也是值得的(正如您的原始JSON所做的那样):

CityStates: {
  2014 {
   0: "New York, NY",
   1: "Los Angeles, CA"
 }
}

使用这些结构,从您的应用程序中读取数据变得微不足道,而您所阅读的数据不会超出您在应用中显示的数据。

注意:上述结构将城市状态存储在类似数组的结构中。如果订单不重要,请考虑将它们存储在类似集合的结构中:

CityStates: {
  2014 {
   "Los Angeles, CA": true,
   "New York, NY": true
 }
}

这种结构的优点是不会有任何重复,因为根据定义,密钥在父节点内保证是唯一的。