我有以下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
答案 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
}
}
这种结构的优点是不会有任何重复,因为根据定义,密钥在父节点内保证是唯一的。